Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
BorlandPascal.doc
Скачиваний:
54
Добавлен:
17.03.2015
Размер:
2.83 Mб
Скачать

Оператор 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.

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

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

дятся до того, как будет выполняться составной оператор.

Соседние файлы в предмете Программирование на Pascal