【问题标题】:Creating Ada record with one field用一个字段创建 Ada 记录
【发布时间】:2010-04-30 17:11:37
【问题描述】:

我已经定义了一个类型:

type Foo is record
   bar : Positive;
end record;

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

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

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

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

【问题讨论】:

  • 仅供参考:根据我的经验,大多数“讨厌 Ada”的人都会因为试图用 Ada 编写其他语言而感到沮丧。一旦你学会了真正写 Ada,它是一门非常好的语言。优于大多数。但是,它使 C 编译器非常糟糕。
  • 例如,你真的必须考虑你的类型。如果在某些极端情况下您会尝试将 0 放入上面的条中,那么您将开始对常量 constraint_error 感到非常沮丧。
  • 作为一个乐观地接近 Ada 的人,我感到/很沮丧,因为与其他语言不同,Ada 让学习“Ada 的做法”变得非常困难。 :) 我喜欢 Ada 的想法,但我发现实现起来令人费解且令人沮丧。我同情 ada 仇恨者。 :p

标签: ada


【解决方案1】:

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-01-19
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2019-03-25
    • 2023-03-21
    • 1970-01-01
    相关资源
    最近更新 更多