我正在学习参数传递。
我一直在研究有关参数传递的问题,但我不明白一个问题。
我搜索了Internet,但没有示例表示表达式。
如果是表达式,我可以知道如何评估通行证吗?
问题如下。
function func(int a, int b, int c)
begin
a := b + c;
b := c + 1;
print a, b, c;
end
function main
begin
int x := 10;
int y := 5;
ink z := 15;
func(x, y, y + z);
print x, y, z;
end
从Wikipedia :(请注意,“按名称呼叫”和“按名称传递”是相同的意思。)
按名称调用是一种评估策略,其中在调用函数之前不评估函数的参数,而是将其直接替换为函数主体(使用捕获避免替换),然后在出现任何参数时保留进行评估在功能上。如果函数主体中未使用参数,则永远不会对参数求值;如果多次使用,则每次出现时都会对其进行重新评估。
因此,对于您的功能,我们应该相应地替换为a → x
,b → y
和c → y + z
:
begin
x := y + (y + z);
y := (y + z) + 1;
print x, y, (y + z);
end
我在用c
代替的地方加上了括号,以明确说明当表达式“复制/粘贴”到函数中时,它不会改变其他运算的优先级;例如,3 * c
等同于3 * (x + y)
,而不是3 * x + y
。
c
被表达式y + z
而不是简单变量代替的事实在这里不会造成任何问题,因为c
从未出现在赋值语句的左侧。