Синтаксис
Array_of_Arrays(1)(2..5) := "asdf";
допустимо, если предположить, что у вас есть действительно массив массивов. Тем не менее, я предполагаю, что вы этого не сделаете. В отличие от некоторых языков (C, Java и т. д.), Ада делает различие между многомерными массивами и «массивами массивов». Двумерный массив объявляется примерно так
type Array_Type is array (1 .. 10, 1 .. 5) of Character;
Array_2D : Array_Type;
(и аналогично для трехмерных и многомерных массивов). Когда вы объявляете свой тип массива таким образом, вы используете индексы, разделенные запятыми, для ссылки на один элемент:
Array_2D (2, 3) := 'x';
и не
Array_2D (2) (3) := 'x'; -- wrong!! will not compile
Вы не можете использовать срез для многомерных массивов:
Array_2D (1, 2..5) := "asdf";
Разработчики языка просто не допустили этого.
Массив массивов будет объявлен следующим образом:
type Array_Row is array (1 .. 5) of Character;
type Array_Of_Array_Type is array (1 .. 10) of Array_Row;
Array_Of_Arrays : Array_Of_Array_Type;
Теперь, поскольку тип строки массива является отдельным, вы не используете синтаксис многомерного массива. Чтобы получить один символ, вы должны использовать что-то вроде
Array_Of_Arrays (2) (3) := 'x';
и законно делать что-то вроде
Array_Of_Arrays (1) (2..5) := "asdf";
но нет
Array_Of_Arrays (1, 2..5) := "asdf"; -- syntax error
Главное помнить, что в этом случае каждая «строка» массива является отдельным объектом массива со своим собственным типом массива; в то время как в многомерном случае строки не имеют своих типов.
Вы можете использовать любой из них; в некоторых случаях более подходящим может быть массив массивов, а в некоторых случаях более подходящим является многомерный массив.
Поскольку String является типом массива, это также массив массивов:
type Array_Of_Strings is array (1 .. 10) of String(1..5);
и это законно:
A : Array_Of_Strings;
A (3) (4) := 'y';
но нет
A (3, 4) := 'y'; -- illegal
person
ajb
schedule
09.07.2013