在这个例子中
x = 1
foo = lambda do
x = 2
end
foo.call
Run Code Online (Sandbox Code Playgroud)
foo会改变x的值.是否可以隐藏x的值,使其在proc调用之前和之后保持不变?
如果你不知道确切的术语,我同意它不是非常可谷歌的.干得好 :
x = 1
foo = lambda do
x = 2
end
foo.call
p x # => 2
x = 1
foo = lambda do |;x|
x = 2
end
foo.call
p x # => 1
Run Code Online (Sandbox Code Playgroud)
它从Ruby 1.9开始就可用,但我不经常遇到它(如果有的话).它在这里描述,它被称为"块局部变量"或"块局部参数":
您还可以使用';'向块声明块本地参数 在块参数列表中.分配给块本地参数不会覆盖调用者范围内块之外的本地参数
@EliSadoff和@tadman在评论中提出了非常有用的观点.
这些块局部变量经常不被使用是有充分理由的:在块中遮蔽外部变量通常不是一个好主意.它可能使代码更难阅读,更难理解并且更难使用.
对于Ruby块,外部和块变量通常是相关的,但不相同:
filename作为外部变量,file作为块变量IO.openarray作为外部变量,element作为块变量Array#eachstrings作为外部变量,string作为块变量Array#map如果你需要一个绑定变量,并x已被用作外部变量,只要使用y,i,z,m,n或whatever.
| 归档时间: |
|
| 查看次数: |
519 次 |
| 最近记录: |