我离开了很长一段时间后才回到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并从中获取范围当然可以正常工作,但我觉得我必须遗漏一些东西。
由于
答案 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;