Spec-Zone.ru › Ada 2012
Справочное руководство по Ada 2012

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, соответствующие литерaли перечисления считаются перегруженными. В любом месте текста программы, где встречается перегруженная литерaль перечисления, тип литерaли перечисления должен быть определим из контекста (см. 8.6).

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

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

Примеры

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


Spec-Zone.ru

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