42
6.2. Сложни (структурирани) оператори
6.2.5. Оператор за присъединяване (with)
Операторът за присъединяване се използва за по-кратък запис на обръщенията
към полетата от един или няколко различни записа. Вътре в оператора всички полета на
специфицирания запис са достъпни и чрез техните имена като обикновени променливи.
Общият вид на оператора е:
WithStatement =
'with' VariableRef {',' VariableRef } 'do'
Statement.
В тялото на оператора за присъединяване (по-точно в оператора след ключовата
дума DO) за всеки идентификатор се проверява дали може да бъде интерпретиран като
поле от зададения запис и, ако е възможно, той винаги се интерпретира така. Това
означава, че всички константи, типове, променливи, процедури и функции с
идентификатори, които съвпадат с имената на полетата на записа, стават недостъпни в
тялото на оператора with.
Операторът
with r1, r2, ..., rn do ...
е еквивалентен на
with r1 do
with r2 do
...with rn do ...
Ако при задаването на записа се използва указател или индексация на масив, то
тези действия се извършват само веднъж в началото на оператора WITH. Например,
следните два фрагмента от програма не само не са еквивалентни, но най-вероятно
вторият ще доведе до непредсказуеми резултати, ако стойността на променливата I не
е определена в началото на оператора WITH, а ако е определена, то той представлява
десетократно даване на стойност на един и същ елемент от масива, като разбира се в
крайна сметка остава в сила последното даване. Докато първият фрагмент е даване на
стойност на десетте елемента от масива. Считаме, че е валидна следната декларация:
 var MyArray: array [1 .. 10] of record 
X, Y: integer;
 end { MyArray};
фрагмент 1
фрагмент 2
for i:= 1 to 10 do begin              with MyArray[i] do begin
  with MyArray[i] do begin             for i:= 1 to 10 do begin
    X:= i; Y:= 10 - i;                   X:= i; Y:= 10 - i;
  end { with };                       end { for };
end { for };
                     end { with };
<<  <  GO  >  >>

Вернуться к началу сайта