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