Справочник по Ada 2005
4.7 Квалифицированные выражения
Выражение qualified_expression используется для явного указания типа и проверки подтипа операнда, являющегося либо выражением, либо агрегатом.
Синтаксис
Правила разрешения имен
Операнд (выражение expression или агрегат aggregate) должен быть разрешен как тип, определяемый subtype_mark, или универсальный тип, который его охватывает.
Динамическая семантика
Вычисление qualified_expression вычисляет операнд (и, если он имеет универсальный тип, преобразует его к типу, определяемому subtype_mark) и проверяет, принадлежит ли его значение подтипу, обозначенному subtype_mark. Если проверка завершается неудачно, генерируется исключение Constraint_Error.
ПРИМЕЧАНИЯ
22 Когда контекст не однозначно определяет ожидаемый тип, можно использовать qualified_expression. В частности, если перегруженное имя name или агрегат aggregate передаётся перегруженной подпрограмме, может потребоваться квалификация операнда для разрешения его типа.
Примеры
Примеры разбиения выражений с помощью квалификации:
тип Mask есть (Fix, Dec, Exp, Signif);
тип Code есть (Fix, Cla, Dec, Tnz, Sub);
тип Code есть (Fix, Cla, Dec, Tnz, Sub);
Print (Mask'(Dec)); -- Dec относится к типу Mask
Print (Code'(Dec)); -- Dec относится к типу Code
Print (Code'(Dec)); -- Dec относится к типу Code
для J в Code'(Fix) .. Code'(Dec) цикл ... -- необходима квалификация для Fix или Dec
для J в Code диапазон Fix .. Dec цикл ... -- квалификация не нужна
для J в Code'(Fix) .. Dec цикл ... -- квалификация не нужна для Dec
для J в Code диапазон Fix .. Dec цикл ... -- квалификация не нужна
для J в Code'(Fix) .. Dec цикл ... -- квалификация не нужна для Dec
Dozen'(1 | 3 | 5 | 7 => 2, others => 0) -- см. 4.6