parameters - 通过名称传递评估变量
问题描述
我正在学习参数传递。
我一直在研究一个关于参数传递的问题,但我不明白一个问题。
我搜索了互联网,但没有参数是表达式的示例。
如果它是一个表达式,我可以知道如何评估 pass-by-name 吗?
问题如下。
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
从未出现在赋值语句的左侧。
推荐阅读
- raku - 地图、嵌套地图和接收器上下文
- javascript - 禁用印地语字符作为输入类型号的输入
- sharepoint - SharePoint online - 单击文档时拦截文档请求
- java - 如何弄清楚为什么我的 Java 应用程序在退出后继续运行?
- python - 如何枚举张量流中的张量?
- python - 用 numpy 数组实现 softmax 函数
- php - 如何在 laravel 5.6 中更改 tymon jwt 身份验证以使用成员模型而不是用户模型?
- reactjs - React 路由器不会重新渲染视图,只是更新自定义本地域上的 URL
- eclipse - 合并不同的 Eclipse 包
- python - 将概率数组调整为二进制数组