Ada中数组类型的大小

时间:2016-03-02 13:57:30

标签: arrays 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并从中获取范围当然可以正常工作,但我觉得我必须遗漏一些东西。

由于

1 个答案:

答案 0 :(得分: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;