Справочное руководство по языку Ада-83


Операторы присваивания


Оператор присваивания заменяет текущее значение переменной новым значением, задаваемым выражением. Переменная в левой части оператора присваивания и выражение в его правой части должны быть одного и того же типа, однако он не должен быть лимитируемым.

оператор-присваивания ::= имя-переменной := выражение;

При выполнении оператора присваивания вначале вычисляются имя переменной и выражение в порядке, не определенном в языке. Затем, если переменная не является массивом, проверяется принадлежность значения выражения подтипу переменной (если же переменная — массив, то при присваивании производится преобразование подтипа, как описано в разд. 5.2.1). Наконец, значение выражения становится новым значением переменной.

При отрицательном результате упомянутой выше проверки принадлежности подтипу возбуждается исключение CONSTRAINT_ERROR, а текущее значение переменной не изменяется. Выполнение присваивания ошибочно, если переменная является подкомпонентой, зависящей от дискриминантов неограниченной именуемой переменной, и при этом выполнении изменяется значение любого из упомянутых дискриминантов.

Примеры:

VALUE := MAX_VALUE - 1; SHADE := BLUE;

NEXT_FRAME(F)(M, N) := 2.5; --CM. 4.1.1 U := DOT_PRODUCT(V, W); -- CM. 6.5

WRITER := (STATUS => OPEN, UNIT => PRINTER, LINE_COUNT => 60); -- CM. 3.7.3 NEXT_CAR.all := (72074, null); -- CM. 3.8.1

Примеры проверок ограничений:

I,J : INTEGER range 1 ..10; К : INTEGER range 1 ..20;

I := J; --одинаковые диапазоны К := J; -- совместимые диапазоны J := К; -- при К<10 возбудится исключение CONSTRAINT_ERROR

Примечание.

Значения дискриминантов объекта, указанного ссылочным значением, не могут быть изменены (даже присваиванием составного значения всему объекту), поскольку такие объекты, созданные генераторами, всегда являются ограниченными (см. 4.8); подкомпоненты таких объектов могут и не быть ограниченными.

Если выражение в правой части является числовым литералом, именованным числом или атрибутом, вырабатывающим результат типа




Начало  Назад  Вперед