Руководство по Ada (Ada 2022)
4.1.2 Сlices
A slice обозначает одномерный массив, образованный последовательностью смежных компонентов одномерного массива. Сlice переменной — это переменная; slice константы — это константа; slice значения — это значение.
Синтаксис
Правила разрешения имён
Префикс prefix slice должен разрешаться как обозначение одномерного массива (после любого неявного разыменования).
Ожидаемый тип для discrete_range slice — тип индекса типа массива.
Статическая семантика
A slice обозначает одномерный массив, образованный последовательностью смежных компонентов массива, обозначаемого prefix, соответствующей диапазону значений индекса, заданного discrete_range.
Динамическая семантика
Для оценки slice slice префикс prefix и discrete_range оцениваются в произвольном порядке. Если slice не является нулевым слайсом (slice, где discrete_range — нулевой диапазон), проверяется, что границы discrete_range принадлежат диапазону индексов массива, обозначаемого prefix. Если проверка не пройдена, возбуждается исключение Constraint_Error.
ПРИМЕЧАНИЕ 1 Согласно правилам, приведенным в 3.10.2, slice не может быть префиксом Access attribute_reference, даже если компоненты или весь массив ассоциированы.
ПРИМЕЧАНИЕ 2 Для одномерного массива A, slice A(N .. N) обозначает массив, имеющий только один компонент; его тип — тип A. С другой стороны, A(N) обозначает компонент массива A и имеет соответствующий тип компонента.
Примеры
Примеры слайсов:
Stars(1 .. 15) -- slice из 15 символов (см. 3.6.3)
Page(10 .. 10 + Size) -- slice из 1 + Size компонентов (см. 3.6)
Page(L)(A .. B) -- slice массива Page(L) (см. 3.6)
Stars(1 .. 0) -- нулевой slice (см. 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) -- slice из 1 + Size компонентов (см. 3.6)
Page(L)(A .. B) -- slice массива Page(L) (см. 3.6)
Stars(1 .. 0) -- нулевой slice (см. 3.6.3)
My_Schedule(Weekday) -- границы заданы подтипом (см. 3.6.1 и 3.5.1)
Stars(5 .. 15)(K) -- то же, что и Stars(K) (см. 3.6.3)
-- при условии, что K принадлежит 5 .. 15