在我的编程课原则中,我们谈论的是不同的调用方法。我们讨论的一些是:
- 按值调用
- 通过引用调用
- 按值/结果调用
- 并点名
我找不到按名称调用如何工作的示例。有人愿意给我举个例子吗?我认为当您将 xml 文件作为输入时,这类似于按名称调用。有人能给我一个更传统的例子吗?
在我的编程课原则中,我们谈论的是不同的调用方法。我们讨论的一些是:
我找不到按名称调用如何工作的示例。有人愿意给我举个例子吗?我认为当您将 xml 文件作为输入时,这类似于按名称调用。有人能给我一个更传统的例子吗?
我将使用一种假设的编程语言。假设我们有一个函数p(x)
打印出 x 然后返回它。现在让我们定义一个函数:
function foo(x, y) { return y+1; }
现在让我们用一些参数来调用它:
foo(p(123),p(456))
x
并且y
将被替换为参数,因此对foo
上面的调用将导致:
return p(456)+1;
所以我们要在屏幕上打印 456 并返回 457。在另一种评估策略中,我们将首先评估函数参数(在此过程中将 123 和 456 打印到屏幕上),然后y
在函数体中替换 456,最终返回 457。
这是人为的,但我希望你能明白。这都是关于替代的。
http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name
在按值调用中,您评估参数,检索然后传递给函数的值。
foo(bar())
被评估为arg = bar();
,然后调用 foo(arg) ,并且在函数体中,这个新分配的 arg 变量是可访问的、可修改的,...
在按名称调用中,您在函数体中用调用期间使用的代码替换对参数的任何引用。然后,评估主体,您将评估论点。
foo(bar())
withfoo(arg) { return arg; }
将被评估为foo(arg) { return bar(); }
当实际参数为scaler时,按名称调用作为按引用调用,但当实际参数为表达式或数组时则不同,然后在每次访问时重新评估实际参数。
这是一个简单的例子
begin
integer n;
procedure p(k: integer);
begin
print(k);
n := n+1;
print(k);
end;
n := 0;
p(n+10);
end;