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

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

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

Синтаксис

subtype_declaration ::=
subtype defining_identifier is subtype_indication;
subtype_indication ::= subtype_mark [constraint]
subtype_mark ::= подтип_имя
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


Spec-Zone.ru

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