語法
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
的關鍵是要記住,在這個情況下,數組中的每個「行」都是一個單獨的數組對象,它擁有自己的數組類型;而在多維情況下,行沒有它們自己的類型。
您可以使用任一個;有些情況下數組數組可能更合適,有些情況下多維數組更適合。
由於字符串是一個數組類型,這也是一個數組的數組:
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
來源
2013-07-09 16:03:23
ajb
其實我做的一個數組的數組,就像你聲明的那樣。我的'Array_Row'被聲明爲String類型,而不是字符。這可能是爲什麼它仍然不會編譯? – halexh
您可以發佈完整的代碼(所有相關的聲明,以及發生錯誤的確切語句)以及編譯器給您的錯誤消息嗎? – ajb