Ada函数可以返回数组吗?

时间:2014-10-12 23:09:33

标签: arrays function ada

我在某处读到Ada只允许函数返回单个项目。由于数组可以容纳多个项,这是否意味着我可以返回整个数组,或者我必须只返回数组的单个索引?

2 个答案:

答案 0 :(得分:4)

是的,Ada函数可以返回数组 - 或记录。

但是,使用它可能有诀窍。例如,如果要将返回值赋给变量,则变量必须与保持数组的大小完全相同,并且有两种常见的方法可以实现此目的。

1)固定大小的数组 - 最简洁的方法是定义数组类型,例如

type Vector is new Array(1..3) of Integer;

function Unit_Vector return Vector;

A : Vector;
begin
   A := Unit_Vector;
...

2)无约束的数组变量。

这些是数组,其大小在运行时通过对它们的初始赋值来确定。除非新值恰好与旧值相同,否则对它们的后续分配将失败。诀窍是使用声明块 - 一个新的作用域 - 以便对无约束变量的每个赋值都是它的第一个赋值。例如:

for i in 1 .. last_file loop
   declare
      text : String := Read_File(Filename(i));
      -- the size of "text" is determined by the file contents
   begin
      --   process the text here. 
      for j in text'range loop
         if text(j) = '*' then 
         ...
      end loop;
   end
end loop;

一个警告:如果数组大小为几十兆字节或更多,则可能无法在堆栈上成功分配。因此,如果此构造引发Storage_Error异常,并且您无法提高堆栈大小,则可能需要使用访问类型,堆分配通过" new"并根据需要解除分配。

答案 1 :(得分:1)

是的,Ada函数可以返回一个数组。例如,Ada String是"一维数组类型,其组件类型是字符类型。" Ada.Strings.Fixed中定义的一些功能 - 包括InsertDeleteHeadTailTrim - 返回String