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

4.1.1 Индексированные компоненты

Индексированный компонент обозначает либо компонент массива, либо элемент семейства элементов.

Синтаксис

indexed_component ::= prefix(выражение {, выражение})

Правила разрешения имен

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

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

Когда префикс обозначает массив, индексированный компонент обозначает компонент массива со значением заданного индекса (индексов). Номинальный подтип индексированного компонента — подтип компонента типа массива.
Когда префикс обозначает семейство элементов, индексированный компонент обозначает отдельный элемент семейства элементов со значением заданного индекса.

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

Для вычисления индексированного компонента префикс и выражения вычисляются в произвольном порядке. Значение каждого выражения преобразуется к соответствующему типу индекса. Проверяется, принадлежит ли каждое значение индекса соответствующему диапазону индексов массива или семейства элементов, обозначаемого префиксом. Если проверка не пройдена, генерируется исключение Constraint_Error.

Примеры

Примеры индексированных компонентов:
My_Schedule(Sat) -- компонент одномерного массива (см. 3.6.1)
Page(10) -- компонент одномерного массива (см. 3.6)
Board(M, J + 1) -- компонент двумерного массива (см. 3.6.1)
Page(10)(20) -- компонент компонента (см. 3.6)
Request(Medium) -- элемент семейства элементов (см. 9.1)
Next_Frame(L)(M, N) -- компонент вызова функции (см. 6.1)
ПРИМЕЧАНИЯ
1 Примечания к примерам: Используются разные обозначения для компонентов многомерных массивов (например, Board) и массивов массивов (например, Page). Компоненты массива массивов являются массивами и могут быть индексированы. Таким образом, Page(10)(20) обозначает 20-й компонент Page(10). В последнем примере Next_Frame(L) — вызов функции, возвращающий значение доступа, которое обозначает двумерный массив.


Spec-Zone.ru

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