Ada 中数组类型的大小

Size of array type in 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;

但我收到错误 "Invalid prefix in selected component 'item_type'"。如果我实例化 item_type 并从中获取范围,它当然可以正常工作,但我觉得我一定遗漏了一些东西。

谢谢

这个:

   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;