Spec-Zone.ru › Ada 2012
Справочник Ada 2012

4.7 Квалифицированные выражения

Квалифицированное выражение используется для явного указания типа и проверки подтипа операнда, который представляет собой либо выражение, либо агрегат.

Синтаксис

qualified_expression ::=
subtype_mark'(expression) | subtype_mark'aggregate

Правила разрешения имён

Операнд (выражение или агрегат) должен разрешаться как тип, определённый subtype_mark, или универсальный тип, который его охватывает.

Статическая семантика

Если операнд квалифицированного выражения обозначает объект, то квалифицированное выражение обозначает постоянный вид этого объекта. Номинальный подтип квалифицированного выражения — подтип, обозначаемый subtype_mark.

Динамическая семантика

Вычисление квалифицированного выражения вычисляет операнд (и, если это универсальный тип, преобразует его к типу, определённому subtype_mark) и проверяет, что его значение принадлежит подтипу, обозначенному subtype_mark. Если эта проверка не пройдена, возбуждается исключение Constraint_Error. Кроме того, если для подтипа, обозначаемого subtype_mark, включены проверки предикатов, выполняется проверка, как определено в подпункте 3.2.4, «Предикаты подтипов», что значение удовлетворяет предикатам подтипа.
ПРИМЕЧАНИЯ
23 Когда контекст не однозначно определяет ожидаемый тип, можно использовать квалифицированное выражение. В частности, если перегруженное имя или агрегат передаются перегруженной подпрограмме, может потребоваться квалифицировать операнд для разрешения его типа.

Примеры

Примеры разяснения выражений с помощью квалификации:
тип Mask есть (Fix, Dec, Exp, Signif);
тип Code есть (Fix, Cla, Dec, Tnz, Sub);
Print (Mask'(Dec)); -- Dec принадлежит типу Mask
Print (Code'(Dec)); -- Dec принадлежит типу Code
для J в Code'(Fix) .. Code'(Dec) цикл ... -- квалификация необходима для Fix или Dec
для J в Code диапазон Fix .. Dec цикл ... -- квалификация не нужна
для J в Code'(Fix) .. Dec цикл ... -- квалификация не нужна для Dec
Dozen'(1 | 3 | 5 | 7 => 2, другие => 0) -- см. 4.6


Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API