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;
我离开了一段时间后才回到 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;