采用以下示例:
type MyArray is array(1..10) of Float;
type MyRecord is record
a: Float;
b: Integer;
c: Boolean;
d: MyArray;
end record;
…
function foo(x: MyRecord) return MyRecord is
y: MyRecord := x;
begin
y.b = -1;
return y.b;
end foo;
如果我可以用foo
做这样的事情,那就太好了:
function foo(x: MyRecord) return MyRecord is
(x with (b => -1));
在更简单的表示法(无效的Ada)中,我可以将foo
编写为表达式函数。有没有办法在Ada中做类似的事情?
答案 0 :(得分:8)
好吧,Ada202x正在开发Delta Aggregates,这实际上是您想要的。在那之前,我唯一想到的两个选择是:
平原旧骨料:
function foo1(x : MyRecord) return MyRecord is
(a => x.a, b => -1, c => x.c, d => x.d);
扩展退货:
function foo2(x : MyRecord) return MyRecord is
begin
return Result : MyRecord := x do
Result.b := -1;
end return;
end foo2;
我知道扩展返回并不能为您提供所需的表达式函数,但这是一种更好的语法,可以通过有趣的方式与有限的类型一起使用。现在,您将不得不依靠简单的旧聚合语法。