Справочник Ada 95
4.1.1 Индексированные компоненты
Индексированный компонент обозначает либо компонент массива, либо элемент семейства элементов.
Синтаксис
indexed_component ::= prefix(expression {, expression})
Правила разрешения имен
Префикс индексированного компонента с заданным числом выражений должен разрешаться в обозначение массива (после любого неявного разыменования) с соответствующим числом позиций индексов или должен разрешаться в обозначение семейства элементов задачи или защищенного объекта (в этом случае должно быть только одно выражение).
Ожидаемый тип для каждого выражения — соответствующий тип индекса.
Статическая семантика
Когда префикс обозначает массив, индексированный компонент обозначает компонент массива со значением указанного индекса (индексов). Номинальный подтип индексированного компонента — подтип компонента типа массива.
Когда префикс обозначает семейство элементов, индексированный компонент обозначает отдельный элемент семейства элементов со значением указанного индекса.
Динамическая семантика
При вычислении индексированного компонента префикс и выражения оцениваются в произвольном порядке. Значение каждого выражения преобразуется в соответствующий тип индекса. Проверяется, принадлежит ли каждое значение индекса соответствующему диапазону индексов массива или семейства элементов, обозначенного префиксом. Если проверка не пройдена, генерируется исключение 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)
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) является вызовом функции, возвращающим значение доступа, которое обозначает двумерный массив.