我定义了一个类型:
type Foo is record
bar : Positive;
end record;
我想创建一个返回记录实例的函数:
function get_foo return Foo is
return (1);
end get_foo;
但阿达不会让我说,“位置聚合不能有一个论点”
愚蠢地尝试,我在记录中添加了另一个愚蠢的字段,然后return (1, DOESNT_MATTER);
有效!
如何告诉Ada这不是位置聚合,而是尝试创建记录?
答案 0 :(得分:7)
位置聚合初始化不能用于只有一个组件的记录,但这并不意味着你不能用一个组件记录。
通过给出命名字段列表来指定记录类型的值。 get_foo
函数的正确代码应如下所示。
function get_foo return Foo is
return (bar => 1);
end get_foo;
您还可以使用Foo'(bar => 1)
表达式指定记录的类型。
使用命名组件列表在实践中比位置启动更好。您可以忘记组件的位置,如果在记录中添加新字段,则不会更改。