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

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

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

Синтаксис

subtype_declaration ::=
subtype defining_identifier is subtype_indication;
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.
ПРИМЕЧАНИЯ
4 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