2016-03-02 52 views
0

我剛剛回到Ada,因爲這很可能是一個初學者問題。基本上我試圖打印一維數組的長度。這個數組在記錄中。如果我創建了一個記錄實例,我可以打印這個類型,但是我覺得必須有一種方法來打印只是單獨類型的長度。這裏的一些代碼,我想到了一個非常牽強的例子將工作:Ada中陣列類型的大小

with Ada.Text_Io; 

procedure TestApp is 
    type int_array is array (integer range <>) of integer; 
    type item_type is record 
     ia : int_array (0 .. 20); 
    end record; 
begin 
    Ada.Text_Io.Put_Line(Integer'image(item_type.ia'length)); 
end TestApp; 

,但我得到的錯誤「在選定的組件‘ITEM_TYPE’無效的前綴」。如果我實例化item_type並從中獲得範圍,它當然可以正常工作,但我覺得我必須缺少一些東西。

由於

回答

2

此:

ia : int_array (0 .. 20); 

是匿名陣列亞型,並獲得一個匿名數組的長度的唯一途徑是通過一個對象(因爲沒有名稱來指定類型)。 但是,您可以明確聲明陣列子類型(一種命名的子類型):

with Ada.Text_Io; 

procedure TestApp is 
    type int_array is array (integer range <>) of integer; 

    subtype sub_int_array is int_array(1..20); 

    type item_type is record 
     ia : sub_int_array; 
    end record; 
begin 
    Ada.Text_Io.Put_Line(Integer'image(sub_int_array'length)); 
end TestApp; 
+0

謝謝 - 我擔心可能是這種情況。我正在處理另一個組的代碼,希望我可以讓他們爲他們的數組聲明一個子類型。如果沒有,我可以實例化一個對象來獲得長度,我想最後並不是那麼髒。 – Kevin

+2

通常我們會在此處說_create_而不是_instantiate_,爲__ __ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ –