arrays - Ada 函数可以返回数组吗?

标签 arrays function ada

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

最佳答案

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

不过,使用它可能有诀窍。例如,如果您将返回值赋给一个变量,则该变量的大小必须恰好能够容纳数组,有两种常见的方法可以实现这一点。

1) 固定大小的数组——最干净的方法是定义一个数组类型,例如

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

function Unit_Vector return Vector;

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

2) 无约束数组变量。

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

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”进行堆分配并根据需要进行释放。

关于arrays - Ada 函数可以返回数组吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26330949/

相关文章:

c++ - 编译器内联函数有多深?

ada - 如何求一个整数的10对数?

arrays - 具有不同类型或对象继承的数组

javascript - 如何删除循环内嵌套的 JS 对象?

ruby-on-rails - 如何检查 Mongoid 数组字段是否包含另一个数组中的一个或多个项目?

jquery - 如何用这个调用调用者命名空间的函数?

types - Ada - 关于 "mod 64"类型定义的编译器警告

Ada SPARK 将字符串转换为整数

arrays - 如何在 Swift 中访问二维数组中的元素

arrays - 比较可选的 Bool 变量不起作用