使用一个字段创建 Ada 记录

发布于 2024-08-31 04:54:45 字数 350 浏览 7 评论 0原文

我定义了一种类型:

type Foo is record
   bar : Positive;
end record;

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

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

但 Ada 不允许我这样做,说“位置聚合不能有一个参数”。
愚蠢地尝试,我在记录中添加了另一个哑字段,然后 return (1, DOESNT_MATTER); 有效!

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

I've define a type:

type Foo is record
   bar : Positive;
end record;

I want to create a function that returns an instance of the record:

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

But Ada won't let me, saying "positional aggregate cannot have one argument".
Stupidly trying, I've added another dumb field to the record, and then return (1, DOESNT_MATTER); works!

How do I tell Ada that's not a positional aggregate, but an attempt to create a record?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

疏忽 2024-09-07 04:54:45

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

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

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

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

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

The positional aggregate initialization cannot be used with record having only one component, but that does not mean you cannot have record with one component.

The values of a record type are specified by giving a list of named fields. The correct code for your get_foo function should be as following.

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

You can also specify the type of the record using the Foo'(bar => 1) expression.

Using the list of named components is better in practice than positional initilization. You can forget the position of the component and it does not change if you add a new field into your record.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文