通过传递的变量的评估

问题描述 投票:0回答:1

我正在学习参数传递。

我一直在研究有关参数传递的问题,但我不明白一个问题。

我搜索了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
parameters parameter-passing programming-languages pass-by-name
1个回答
0
投票

Wikipedia :(请注意,“按名称呼叫”和“按名称传递”是相同的意思。)

按名称调用是一种评估策略,其中在调用函数之前不评估函数的参数,而是将其直接替换为函数主体(使用捕获避免替换),然后在出现任何参数时保留进行评估在功能上。如果函数主体中未使用参数,则永远不会对参数求值;如果多次使用,则每次出现时都会对其进行重新评估。

因此,对于您的功能,我们应该相应地替换为a → xb → yc → 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从未出现在赋值语句的左侧。

© www.soinside.com 2019 - 2024. All rights reserved.