Arrays Ada中数组类型的大小

Arrays Ada中数组类型的大小,arrays,ada,Arrays,Ada,我离开一段时间后才回到Ada,所以这可能是一个初学者的问题。基本上我想打印一维数组的长度。此数组位于记录内部。我可以打印的类型罚款,如果我做一个记录的例子,但我觉得必须有一种方法来打印的长度仅仅从类型。下面是一个我认为可以工作的代码的非常做作的示例: with Ada.Text_Io; procedure TestApp is type int_array is array (integer range <>) of integer; type item_type is

我离开一段时间后才回到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;
带有Ada.Text\u Io;
程序TestApp是
int_数组类型是整数的数组(整数范围);
类型项\类型为记录
ia:int_数组(0..20);
结束记录;
开始
Ada.Text_Io.Put_行(Integer'image(item_type.ia'length));
结束测试pp;
但我得到错误“所选组件'item_type'中的前缀无效”。如果我实例化item_type并从中获取范围,它当然可以正常工作,但我觉得我肯定遗漏了什么

谢谢

这:

   ia : int_array (0 .. 20);
是匿名数组子类型,获取匿名数组长度的唯一方法是通过对象(因为没有名称来指定类型)。 但是,您可以显式声明数组子类型(命名子类型):

带有Ada.Text\u Io;
程序TestApp是
int_数组类型是整数的数组(整数范围);
子类型sub_int_数组是int_数组(1..20);
类型项\类型为记录
ia:子数组;
结束记录;
开始
Ada.Text_Io.Put_行(整数图像(子整数数组长度));
结束测试pp;
这是:

是匿名数组子类型,获取匿名数组长度的唯一方法是通过对象(因为没有名称来指定类型)。 但是,您可以显式声明数组子类型(命名子类型):

带有Ada.Text\u Io;
程序TestApp是
int_数组类型是整数的数组(整数范围);
子类型sub_int_数组是int_数组(1..20);
类型项\类型为记录
ia:子数组;
结束记录;
开始
Ada.Text_Io.Put_行(整数图像(子整数数组长度));
结束测试pp;

谢谢-我担心可能是这样。我正在处理另一个组的代码,希望我能让他们为他们的数组声明一个子类型。如果不是的话,我可以实例化一个对象来获得长度,我想这最终并没有那么糟糕。通常我们会说创建而不是在这里实例化,为泛型保留实例化。谢谢-我担心可能是这样。我正在处理另一个组的代码,希望我能让他们为他们的数组声明一个子类型。如果不是的话,我可以实例化一个对象来获得长度,我想这最终并没有那么糟糕。通常我们会说创建而不是在这里实例化,为泛型保留实例化。
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;