有没有办法用 Ada 中的值序列快速初始化数组?

Adi*_*Adi 1 ada

例如,如果我想像这样初始化一个元素数组:

someArray : array(1..10) of Integer := (2,4,6,8,10,12,14,16,18,20);
Run Code Online (Sandbox Code Playgroud)

有没有一种快捷方式或某种机制可以更快地做到这一点?

例如,Matlab 和 python 有linspace返回等距数字序列的函数。Ada 是否有类似的功能适用于任何长度的任何数组类型?

我可以创建一个通用函数来执行此操作,但这需要对每个数组类型进行单独的初始化,并且对于基本上为每个数组类型使用一次的函数来说,这似乎有点麻烦。

Sim*_*ght 7

Ada 2022(例如带有 的 GCC 12 -gnat2022)允许

package Aggregates is

   type A is array (Integer range <>) of Integer;

   V : A := (for J in 1 .. 10 => J * 2);

end Aggregates;
Run Code Online (Sandbox Code Playgroud)

  • 我想指出的是,当该链接的文档说使用括号圆数组聚合已过时时,这是 AdaCore 的立场,ARM 没有证明这一点(即它不在附件 J 中)。对于任何试图为可能无法使用最新编译器的人进行开发的人来说,这都是非常烦人的(/rant) (2认同)