我想知道docs 中描述的free pascal 函数中非常奇怪的行为。
据说,以下代码将成功编译/执行:
function Test : integer;
begin
Test := 2;
end;
begin
WriteLn(Test());
end.
Run Code Online (Sandbox Code Playgroud)
Test但是如果我在方程右侧使用函数名称,它将执行递归循环。
因此,pascal 函数从一方面来说,用变量的名称Test和函数返回值的类型来定义变量integer。从另一边,您仍然可以调用函数(使用其名称进行递归调用)。
为什么?!目标是什么?
函数体内有一个特殊变量,其名称与函数名称相同。它用于保存函数结果。
它是在原始 Pascal 语法中引入的。后来为了防止出现不便,Result引入了另一个名为 name 的变量,它只是前一个变量的联盟:
Test := 2;
i := Result + 3; // Here i = 5;
Run Code Online (Sandbox Code Playgroud)
所以,就目前而言,Test := 2;和Result := 2;是一样的。
如果在等式右侧使用函数名称,它将被解释为变量,而不是函数调用:
Test := Test + 1; // Increments Test value
Run Code Online (Sandbox Code Playgroud)
但您仍然可以使用括号递归调用函数:
Test := Test() + 1; // Recursion
Run Code Online (Sandbox Code Playgroud)
因此,您可以通过三种方式从函数返回值(对于您的示例):
function Test : integer;
begin
Test := 2; // Function result = 2
Result := 2; // Same to previous
Exit(2); // Sets function result to 2 end exits immediately
end;
Run Code Online (Sandbox Code Playgroud)
使用哪种方法取决于您。
| 归档时间: |
|
| 查看次数: |
783 次 |
| 最近记录: |