Spec-Zone.ru › Ada 2022
Руководство по Ada (Ada 2022)

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

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

Синтаксис

indexed_component ::= префикс(выражение {, выражение})

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

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

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

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

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

Для вычисления индексированного компонента префикс и выражения вычисляются в произвольном порядке. Значение каждого выражения преобразуется в соответствующий тип индекса. Проверяется, что каждое значение индекса принадлежит соответствующему диапазону индексов массива или семейства элементов, обозначаемого префиксом. Если эта проверка не пройдена, генерируется исключение 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)
Для компонентов многомерных массивов (таких как Board) и массивов массивов (таких как Page) используются разные обозначения. Компоненты массива массивов представляют собой массивы и могут быть индексированы. Таким образом, Page(10)(20) обозначает 20-й компонент Page(10). В последнем примере Next_Frame(L) — это вызов функции, возвращающий значение доступа, которое обозначает двумерный массив.


Spec-Zone.ru

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