Справочник по Ada 2005
4.1.2 Срезы
Срез обозначает одномерный массив, образованный последовательностью смежных компонентов одномерного массива. Срез переменной является переменной; срез константы является константой; срез значения является значением.
Синтаксис
Правила разрешения имён
Префикс срезов должен разрешаться как обозначение одномерного массива (после любого неявного разыменования).
Ожидаемый тип для дискретного_диапазона срезов — тип индекса типа массива.
Статическая семантика
Срез обозначает одномерный массив, образованный последовательностью смежных компонентов массива, обозначенного префиксом, соответствующей диапазону значений индекса, заданному дискретным диапазоном.
Тип среза — это тип префикса. Его границы определяются дискретным_диапазоном.
Динамическая семантика
Для вычисления срезов префикс и дискретный_диапазон вычисляются в произвольном порядке. Если срез не является нулевым срезом (срез, где дискретный_диапазон является нулевым диапазоном), то выполняется проверка, что границы дискретного_диапазона принадлежат диапазону индексов массива, обозначенного префиксом. Если эта проверка не пройдена, генерируется Constraint_Error.
ПРИМЕЧАНИЯ
2 Срез не допускается в качестве префикса атрибута доступа ссылка_на_атрибут, даже если компоненты или весь массив связаны по ссылке. См. 3.10.2.
3 Для одномерного массива A, срез A(N .. N) обозначает массив, содержащий только один компонент; его тип — тип A. С другой стороны, A(N) обозначает компонент массива A и имеет соответствующий тип компонента.
Примеры
Примеры срезов:
Stars(1 .. 15) -- срез из 15 символов (см. 3.6.3)
Page(10 .. 10 + Size) -- срез из 1 + Size компонентов (см. 3.6)
Page(L)(A .. B) -- срез массива Page(L) (см. 3.6)
Stars(1 .. 0) -- нулевой срез (см. 3.6.3)
My_Schedule(Weekday) -- границы, заданные подтипом (см. 3.6.1 и 3.5.1)
Stars(5 .. 15)(K) -- то же, что Stars(K) (см. 3.6.3)
-- при условии, что K входит в 5 .. 15
Page(10 .. 10 + Size) -- срез из 1 + Size компонентов (см. 3.6)
Page(L)(A .. B) -- срез массива Page(L) (см. 3.6)
Stars(1 .. 0) -- нулевой срез (см. 3.6.3)
My_Schedule(Weekday) -- границы, заданные подтипом (см. 3.6.1 и 3.5.1)
Stars(5 .. 15)(K) -- то же, что Stars(K) (см. 3.6.3)
-- при условии, что K входит в 5 .. 15