gpt4 book ai didi

ada - Ada 是否有任何关于何时使用函数与带有输出参数的过程的惯用规则?

转载 作者:行者123 更新时间:2023-12-04 03:11:26 32 4
gpt4 key购买 nike

您可以通过让函数返回一个值来分配给变量:
My_Int : Integer := My_Math_Func [(optional params)];
或者你可以用一个过程来做到这一点(假设 My_Int 已经被声明):
My_Math_Proc ([optional params;] [in] out My_Int);
显然,一个过程不能像第一个例子中的函数那样初始化一个变量,但我希望有一些关于何时以及为什么选择一个而不是另一个的具体、实用的规则。

最佳答案

两个让你开始......

当要返回多个结果时,具有多个 OUT 参数的过程通常是一个不错的选择。

如果在子程序调用之前不知道对象的大小,则不能使用 OUT 参数,因为它必须准确地声明为正确的大小,但函数返回可以通过初始化调用者中的变量来设置大小。这通常与在 Declare 块中声明的变量一起使用,它可以在每次调用时保存不同大小的字符串。

此示例显示了通过调用 Read_File 函数初始化的变量“text”,以在循环的每次迭代中保存不同文件的内容。安全,不需要“malloc”或“free”或指针。 (在本例中 Filename 是一个文件名数组)

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;

编辑:我想我最好提及基本的数学原理,因为与许多其他语言相比,Ada 更接近于数学逻辑。

函数和过程都是子程序,但用途不同:
  • 函数是对表达式的抽象:就像数学运算符(Ada 中的运算符只是一个函数)。理想情况下,它从多个操作数 提供结果,而没有其他 ,使它们保持不变,没有状态,也没有副作用。这种理想被称为“纯函数”(并且应用“pragma pure”要求编译器检查其纯度)——类似的限制适用于函数式编程 (FP) 语言。纯函数允许进行大量优化(因为重新排序它们不会改变结果)。在实践中,Ada 并没有那么严格,也允许不纯函数。
  • 过程是对语句的抽象。它通常具有一些物理效果(例如改变状态),因为它不提供结果。

  • 因此,表达式和语句之间的逻辑分离作为函数和过程之间的分离被延续到子程序(抽象)中。

    这可能是决定使用哪个的最佳方式。

    关于ada - Ada 是否有任何关于何时使用函数与带有输出参数的过程的惯用规则?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60243828/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com