为什么在这个例子中 array'First 总是 1?
Why is array'First always 1 in this example?
我有一个节点数组:
type NodeArray is array (Positive range 1 .. 5) of XNode;
该节点有一些数据和一个整数 ID,但现在这并不重要。
我理解的方式是 array'First
(请原谅滥用符号)总是指向或引用范围或数组中的第一项,而不是范围类型的整数。
我的问题是为什么我总是得到 1 而不是数组中的第一个条目。
如果您需要查看更多代码,我可以提供,我只是想让我的示例保持简单和简短。
你的
type NodeArray is array (Positive range 1 .. 5) of XNode;
定义一个约束数组类型(ALRM 3.6(5)),其第一个索引将始终为 1。
如果你想使用一种类型来创建具有不同索引范围的数组对象,你需要一个不受约束的数组类型 (ALRM 3.6(3)),其边界类似于 Positive range <>
(注意 1,一旦你创建了这样一个对象,它的边界是固定的;注意 2,您可以使用适合该问题的任何标量而不是 Positive
。
with Ada.Text_IO; use Ada.Text_IO;
procedure Zython is
type Unconstrained_Node_Array is array (Positive range <>) of Float;
subtype Constrained_Node_Array is Unconstrained_Node_Array (1 .. 5);
U : Unconstrained_Node_Array (42 .. 44); -- must include the index range
C : Constrained_Node_Array; -- the index range is 1 .. 5
begin
for J in U'Range loop
U (J) := Float (J) * 2.0;
end loop;
Put_Line ("U'First: "
& Positive'Image (U'First)
& ", U (U'First): "
& Float'Image (U (U'First)));
for J in C'Range loop
C (J) := Float (J) * 2.0;
end loop;
Put_Line ("C'First: "
& Positive'Image (C'First)
& ", C (C'First): "
& Float'Image (C (C'First)));
end Zython;
我有一个节点数组:
type NodeArray is array (Positive range 1 .. 5) of XNode;
该节点有一些数据和一个整数 ID,但现在这并不重要。
我理解的方式是 array'First
(请原谅滥用符号)总是指向或引用范围或数组中的第一项,而不是范围类型的整数。
我的问题是为什么我总是得到 1 而不是数组中的第一个条目。
如果您需要查看更多代码,我可以提供,我只是想让我的示例保持简单和简短。
你的
type NodeArray is array (Positive range 1 .. 5) of XNode;
定义一个约束数组类型(ALRM 3.6(5)),其第一个索引将始终为 1。
如果你想使用一种类型来创建具有不同索引范围的数组对象,你需要一个不受约束的数组类型 (ALRM 3.6(3)),其边界类似于 Positive range <>
(注意 1,一旦你创建了这样一个对象,它的边界是固定的;注意 2,您可以使用适合该问题的任何标量而不是 Positive
。
with Ada.Text_IO; use Ada.Text_IO;
procedure Zython is
type Unconstrained_Node_Array is array (Positive range <>) of Float;
subtype Constrained_Node_Array is Unconstrained_Node_Array (1 .. 5);
U : Unconstrained_Node_Array (42 .. 44); -- must include the index range
C : Constrained_Node_Array; -- the index range is 1 .. 5
begin
for J in U'Range loop
U (J) := Float (J) * 2.0;
end loop;
Put_Line ("U'First: "
& Positive'Image (U'First)
& ", U (U'First): "
& Float'Image (U (U'First)));
for J in C'Range loop
C (J) := Float (J) * 2.0;
end loop;
Put_Line ("C'First: "
& Positive'Image (C'First)
& ", C (C'First): "
& Float'Image (C (C'First)));
end Zython;