TURBO PASCAL |
Новости
|
Оператор withВ операциях над записями оператор with удобно использовать для краткого обращения к полям записи. В операторе with к полям одной или более конкретных переменных типа запись можно обращать- ся, используя только идентификаторы полей. Оперaтор with имеет следующий синтаксис: ┌────┐ ┌───────────────┐ ┌──┐ ┌────────┐ оператор ──>│with├─────>│ ссылка на ├──┬─>│do├──>│оператор├> 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. Если выборка переменной типа запись связана с индексировани- ем массива или разыменованием указателя, то эти действия произво- дятся до того, как будет выполняться составной оператор. |
(с)Все права защищены По всем интересующим вопросам прошу писать на электронный адрес |