Справочник по Ada (Ada 2022)
5.2.1 Символы целевого имени
@, известный как целевое имя оператора присваивания, предоставляет сокращение, чтобы избежать повторения потенциально длинных имен в операторах присваивания.
Синтаксис
target_name ::= @
Правила разрешения имен
Если target_name встречается в операторе_присваивания A, переменная_имя V оператора A является полным контекстом. Целевое имя представляет собой постоянный вид V, имеющий номинальный тип V.
Правила легальности
Динамическая семантика
Для выполнения оператора_присваивания с одним или несколькими целевыми именами в его выражении, переменная_имя V оператора_присваивания вычисляется сначала для определения объекта, обозначаемого V, а затем выражение оператора_присваивания вычисляется с вычислением каждого целевого имени, которое возвращает постоянный вид целевого объекта, свойства которого в остальном идентичны свойствам вида, предоставленного V. Остальная часть выполнения оператора_присваивания осуществляется как указано в 5.2.
Примеры
Примеры использования символов целевого имени:
Board(1, 1) := @ + 1.0;
-- Сокращение для Board(1, 1) := Board(1, 1) + 1.0;
-- (Board объявлен в 3.6.1).
-- Сокращение для Board(1, 1) := Board(1, 1) + 1.0;
-- (Board объявлен в 3.6.1).
My_Complex_Array : array (1 .. Max) of Complex; -- См. 3.3.2, 3.8.
...
-- Возведите в квадрат элемент в позиции Count (см. 3.3.1):
My_Complex_Array (Count) := (Re => @.Re**2 - @.Im**2,
Im => 2.0 * @.Re * @.Im);
-- Целевое имя может использоваться несколько раз и
-- в качестве префикса, если нужно.
...
-- Возведите в квадрат элемент в позиции Count (см. 3.3.1):
My_Complex_Array (Count) := (Re => @.Re**2 - @.Im**2,
Im => 2.0 * @.Re * @.Im);
-- Целевое имя может использоваться несколько раз и
-- в качестве префикса, если нужно.