Bob*_*y S 13 scope parameter-passing
参数传递技术:
从我可以收集到的这两种技术.
按参考呼叫:
变量的地址位置正在传递给函数,因此在函数的局部范围内,对局部变量值的任何更改都将改变原始变量的值,因为它们指向同一个位置.
按名称呼叫:
实际变量正在传递给函数.函数局部范围内变量值的任何更改也将反映在函数的外部.
在我看来,这两个参数传递技术完成了同样的事情?它们都作用于原始变量内容.我的定义有错吗?我是以错误的方式思考这个问题吗?
Cor*_*rch 17
按名称呼叫与您描述的略有不同.在伪代码中,想象一下:
function foo(index, value-increment)
sum = 0
loop index = 1 to 3
sum = sum + value-increment
return sum
x = 3
foo(x, 1 / x)
Run Code Online (Sandbox Code Playgroud)
如果我们的foo调用是通过引用,则第二个参数1 / x仅在有效地给出我们时进行评估:1/3 + 1/3 + 1/3.这是一个严格的评估 - 在应用函数之前完全评估每个参数.
如果我们按名称打电话,1 / x则不会严格评估.相反,它在循环中根据需要进行评估.实际上,循环变为:
loop x = 1 to 3
sum = sum + 1 / x
Run Code Online (Sandbox Code Playgroud)
或1/1 + 1/2 + 1/3.
看一下thunk,虽然thunk并不总是意味着呼叫.Haskell有thunks的想法,但是使用call-by-need,1 / x直到需要它才会被评估,但之后只会被评估一次(更不用说Haskell没有可变的循环变量).
其他资源:
| 归档时间: |
|
| 查看次数: |
9360 次 |
| 最近记录: |