6

我定义了一个类型:

type Foo is record
   bar : Positive;
end record;

我想创建一个返回记录实例的函数:

function get_foo return Foo is
    return (1);
end get_foo;

但艾达不会让我说“位置聚合不能有一个参数”。
愚蠢地尝试,我在记录中添加了另一个愚蠢的字段,然后return (1, DOESNT_MATTER);工作!

我如何告诉 Ada 这不是位置聚合,而是创建记录的尝试?

4

1 回答 1

7

位置聚合初始化不能与只有一个组件的记录一起使用,但这并不意味着您不能拥有一个组件的记录。

记录类型的值是通过给出命名字段列表来指定的。您的函数的正确代码get_foo应如下所示。

function get_foo return Foo is
    return (bar => 1);
end get_foo;

您还可以使用Foo'(bar => 1)表达式指定记录的类型。

在实践中使用命名组件列表比位置初始化更好。您可以忘记组件的位置,如果您在记录中添加新字段,它不会改变。

于 2010-04-30T09:11:37.773 回答