Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

3.2.2 Объявления подтипов

Объявление subtype_declaration объявляет подтип некоторого ранее объявленного типа, как определено subtype_indication.

Синтаксис

subtype_declaration ::=
subtype defining_identifier is subtype_indication
[aspect_specification];
subtype_indication ::= [null_exclusion] subtype_mark [constraint]
subtype_mark ::= subtype_name
constraint ::= scalar_constraint | composite_constraint
scalar_constraint ::=
range_constraint | digits_constraint | delta_constraint
composite_constraint ::=
index_constraint | discriminant_constraint

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

subtype_mark должен разрешаться в обозначение подтипа. Тип, определяемый subtype_mark, является типом подтипа, обозначаемого subtype_mark.

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

Выполнение объявления subtype_declaration состоит из выполнения subtype_indication. Выполнение subtype_indication создаёт новый подтип. Если subtype_indication не включает constraint, новый подтип имеет тот же (возможно, нулевой) ограничитель, что и обозначаемый subtype_mark. Выполнение subtype_indication, содержащего constraint, происходит следующим образом:
  • Сначала выполняется constraint.
  • Затем выполняется проверка, что constraint совместим с подтипом, обозначаемым subtype_mark.
Условие, накладываемое constraint, — это условие, полученное после выполнения constraint. Правила, определяющие совместимость, приведены для каждой формы constraint в соответствующем подразделе. Эти правила таковы, что если constraint совместим с подтипом, то условие, накладываемое constraint, не может противоречить ни одному условию, уже накладываемому подтипом на его значения. Если любая проверка совместимости завершится неудачей, возникает исключение Constraint_Error.
ПРИМЕЧАНИЕ. scalar_constraint может быть применён к подтипу соответствующего скалярного типа (см. 3.5, 3.5.9 и J.3), даже если подтип уже ограничен. С другой стороны, composite_constraint может быть применён к составному подтипу (или подтипу доступа к составному типу) только в том случае, если составной подтип не ограничен (см. 3.6.1 и 3.7.1).

Примеры

Примеры объявлений подтипов:
subtype Rainbow is Color range Red .. Blue; -- см. 3.2.1
subtype Red_Blue is Rainbow;
subtype Int is Integer;
subtype Small_Int is Integer range -10 .. 10;
subtype Up_To_K is Column range 1 .. K; -- см. 3.2.1
subtype Square is Matrix(1 .. 10, 1 .. 10); -- см. 3.6
subtype Male is Person(Sex => M); -- см. 3.10.1
subtype Binop_Ref is not null Binop_Ptr; -- см. 3.10


Spec-Zone.ru

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