例如
def test
a = "a is for apple"
def inner_method
a = "something" # this will refer to a different "a"
end
inner_method
puts a
end
这其中有什么原因吗?块有词法作用域,那么为什么方法没有呢?这会被修复吗?
这是因为 Ruby 的方法不是第一类对象(就像它们在IO http://iolanguage.com/, 例如)。那么当你定义内部方法时,接收者是什么呢?大概是方法本身,或者绑定什么的,但是 Ruby 没有那么深的 OO。
不管怎样,我不清楚你期望在你的例子中发生什么,你是否希望它修改局部变量a
?如果是这样,那么过程就是方法的合适替代品。
def test
a = "a is for apple"
inner_method = lambda do
a = "something"
end
a # => "a is for apple"
inner_method.call
a # => "something"
end
test
"功能.rb https://github.com/JoshCheek/deject/blob/ab885ff2afe62f258a32c99616c93a4ba9e24dab/lib/deject/functional.rb”是这种编程风格的一个更夸张的例子。
And "lambda、proc 和 Proc.new https://web.archive.org/web/20111022133433/http://joshcheek.com/blog/1_lambda_proc_and_proc_new” 是 Ruby 不同类型闭包的细分。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)