Ada 如何通过一次更改将记录x分配给记录y?

Ada 如何通过一次更改将记录x分配给记录y?,ada,Ada,以以下为例: 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

以以下为例:

   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中有这样的方法吗?

好吧,Ada202x正在研究基本上你想要的东西。在此之前,我唯一能想到的两个选择是:

普通旧骨料:

函数foo1(x:MyRecord)返回的MyRecord为
(a=>x.a,b=>1,c=>x.c,d=>x.d);
延长回报:

函数foo2(x:MyRecord)返回的MyRecord为
开始
返回结果:MyRecord:=x do
结果b:=-1;
末端返回;
完二日;;

我知道ExtendedReturn并不能得到您想要的表达式函数,但它是一种更好的语法,可以以有趣的方式与有限的类型一起使用。现在,您将不得不依赖于普通的旧聚合语法。

好吧,Ada202x正在研究您本质上想要的语法。在此之前,我唯一能想到的两个选择是:

普通旧骨料:

函数foo1(x:MyRecord)返回的MyRecord为
(a=>x.a,b=>1,c=>x.c,d=>x.d);
延长回报:

函数foo2(x:MyRecord)返回的MyRecord为
开始
返回结果:MyRecord:=x do
结果b:=-1;
末端返回;
完二日;;
我知道ExtendedReturn并不能得到您想要的表达式函数,但它是一种更好的语法,可以以有趣的方式与有限的类型一起使用。现在,您将不得不依赖普通的旧聚合语法