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

3.5.1 Типы перечисления

Определение enumeration_type_definition задаёт тип перечисления.

Синтаксис

enumeration_type_definition ::=
(enumeration_literal_specification {, enumeration_literal_specification})
enumeration_literal_specification ::= defining_identifier | defining_character_literal
defining_character_literal ::= character_literal

Правила допустимости

Идентификаторы defining_identifier и defining_character_literal, указанные в enumeration_type_definition, должны быть различны.

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

Каждое enumeration_literal_specification является явным объявлением соответствующей литералы перечисления: оно объявляет безаргументную функцию, имя которой совпадает с defining_identifier или defining_character_literal, а тип результата — тип перечисления.
Каждая литерaль перечисления соответствует одному значению типа перечисления и одному номеру позиции. Номер позиции значения первой перечисленной литерaли перечисления равен нулю; номер позиции значения каждой последующей литерaли перечисления на единицу больше номера позиции её предшественника в списке.
Определённые порядковые отношения между значениями типа перечисления следуют порядку соответствующих номеров позиций.
Если один и тот же defining_identifier или defining_character_literal указан в более чем одном enumeration_type_definition, соответствующие литералы перечисления считаются перегруженными. В любом месте текста программы, где встречается перегруженная литерала перечисления, тип литералы перечисления должен быть определим из контекста (см. 8.6).

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

Выполнение enumeration_type_definition создаёт тип перечисления и его первый подтип, который ограничен базовым диапазоном типа.
При вызове безаргументная функция, связанная с литералой перечисления, возвращает соответствующее значение типа перечисления.
ПРИМЕЧАНИЯ
24 Если литерала перечисления встречается в контексте, который не позволяет определить тип литералы, то квалификация именем типа перечисления является одним из способов разрешения неоднозначности (см. 4.7).

Примеры

Примеры типов и подтипов перечисления:
тип День есть (Пн, Вт, Ср, Чт, Пт, Сб, Вс);
тип Масть есть (Трефы, Бубны, Червы, Пики);
тип Пол есть (М, Ж);
тип Уровень есть (Низкий, Средний, Срочный);
тип Цвет есть (Белый, Красный, Жёлтый, Зелёный, Синий, Коричневый, Чёрный);
тип Свет есть (Красный, Жёлтый, Зелёный); -- Красный и Зелёный перегружены
тип Шестнадцатеричный есть ('A', 'B', 'C', 'D', 'E', 'F');
тип Смешанный есть ('A', 'B', '*', B, Нет, '?', '%');
подтип БуднийДень есть День диапазон Пн .. Пт;
подтип Козырь есть Масть диапазон Червы .. Пики;
подтип Радуга есть Цвет диапазон Красный .. Синий; -- цвет Красный, а не Свет


Spec-Zone.ru

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