Справочное руководство по языку Ада-83


Именуемые типы - часть 8


раздел-вариантов ::= case простое-имя-дискриминанта is

вариант {вариант} end case;

вариант ::= when выбор {|выбор} => список_компонент

выбор ::= простое-выражение |дискретный-диапазон | others | простое-имя-компоненты

Каждый вариант начинается со списка выборов, которые должны быть того же типа, что и дискриминант раздела вариантов. Тип дискриминанта раздела вариантов не должен быть настраиваемым формальным типом настройки. Если подтип дискриминанта статический, то каждое значение этого подтипа должно быть представлено в наборе выборов раздела вариантов один и только один раз и другие значения недопустимы. Другими словами, каждое значение (базового) типа дискриминанта должно быть представлено один и только один

раз в наборе вариантов.

Простые выражения и дискретные диапазоны, данные как выборы в разделе вариантов, должны быть статическими. Определенный дискретным диапазоном выбор задает все значения соответствующего диапазона (и ни одного, если диапазон пустой). Выбор

others

допустим только для последнего варианта и только как его единственный выбор; он задает все остальные значения (возможно, и ни одного), не упомянутые в выборах предыдущих вариантов. Простое имя компоненты недопустимо в качестве выбора варианта (хотя оно присутствует

в синтаксисе выбора).

Значение записи содержит значения компонент данного варианта тогда и только тогда, когда значение дискриминанта равно одному из значений, заданных выборами варианта. Это правило применимо в свою очередь к любому вложенному варианту, который сам включен в список компонент данного варианта. Если список компонент варианта задан как

null,

то вариант не имеет компонент.

Примеры именуемого типа с разделом вариантов:

type DEVICE is (PRINTER, DISK, DRUM); type STATE is (OPEN, CLOSED);

type PERIPHERAL(UNIT : DEVICE := DISK) is

record

STATUS : STATE; case UNIT is

whenPRINTER => LINECOUNT : INTEGER range1 .. PAGESIZE; when others => CYLINDER : CYLINDERINDEX; TRACK : TRACKNUMBER; end case; end record:




Начало  Назад  Вперед



Книжный магазин