Синтаксис
Array_of_Arrays(1)(2..5) := "asdf";
является законным, при условии, что у вас есть действительно массив массивов. Тем не менее, я предполагаю, что вы этого не делаете. В отличие от некоторых языков (C, Java и т. Д.), Ada проводит различие между многомерными массивами и «массивами массивов». Двумерный массив объявляется нечто вроде
type Array_Type is array (1 .. 10, 1 .. 5) of Character;
Array_2D : Array_Type;
(и аналогично для 3- или выше одномерных массивов). Когда вы объявляете тип массива, как это, можно использовать индексы, разделенные запятыми, чтобы обратиться к одному элементу:
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
Ключ должен помнить, что в этом case, каждая «строка» массива представляет собой отдельный объект массива со своим собственным типом массива; в то время как в многомерном случае строки не имеют собственных типов.
Вы можете использовать любой из них: есть случаи, когда массив массивов может быть более уместным, а некоторые, где многомерный массив более уместен.
Поскольку строка является типом массива, это также является массивом массивов:
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
я на самом деле сделать массив массивов, как вы заявили. Мой «Array_Row» объявлен как тип String, хотя вместо символа. Неужели это и не скомпилируется? – halexh
Не могли бы вы выслать полный код (все соответствующие объявления и точный оператор, который получил ошибку), и сообщение об ошибке, которое дал вам компилятор? – ajb