Руководство по языку B.Pascal 7

         

Оператор with


В операциях над записями оператор with удобно использовать для краткого обращения к полям записи. В операторе with к полям одной или более конкретных переменных типа запись можно обращать- ся, используя только идентификаторы полей. Оперaтор with имеет следующий синтаксис:

-----¬ ----------------¬ ---¬ ---------¬ оператор -->¦with+----->¦ ссылка на +--T->¦do+-->¦оператор+> with L----- ^ ¦переменную типа¦ ¦ L--- L--------- ¦ ¦ запись ¦ ¦ ¦ ¦ или объект ¦ ¦ ¦ L---------------- ¦ ¦ ----¬ ¦ L--------+ , ¦<--------- L----

ссылка на переменную ---------------------¬ типа запись или объект --->¦ссылка на переменную+--> L---------------------

Возьмем следующее описание:

type TDate = record Day : Integer: Month : Integer; Year : Integer: end;

var OrderDate: TDate;

С учетом данного описания приведем пример оператора with:

with OrderDate do if Month = 12 then begin Month := 1; Year := Year + 1 end else Month := Month + 1;

Это эквивалентно следующему:

if OrderDate.Month = 12 then begin OrderDate.Month := 1; OrderDate.Year := TDate.Year + 1 end else Date.month := TDate.Month + 1; В операторе with сначала производится проверка каждой ссылки на переменную, а именно: можно ли ее интерпретировать, как поле записи. Если это так, то она всегда интерпретируется именно таким образом, даже если имеется доступ к переменной с тем же именем.

Допустим описаны следующие переменные:

type TPoint = record x,y: Integer; end; var x: Point; y: Integer;

В этом случае и к x, и к y можно обращаться, как к перемен- ной или как к полю записи. В операторе:

with x do begin x := 10; y := 25; end;

x между ключевыми словами with и dо относится к переменной типа указатель, а в составном операторе x и y ссылаются на x.x и y.y.

Оператор:

with V1,V2,...Vn do s;

эквивалентен операторам:

with V1 do with V2 do ... with Vn do S;

В обоих случаях, если Vn является полем и v1, и v2, то она интерпретируется как v2.Vn, а не как v1.Vn.

Если выборка переменной типа запись связана с индексировани- ем массива или разыменованием указателя, то эти действия произво- дятся до того, как будет выполняться составной оператор.



Содержание раздела