例如
- 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中).所以当你定义内部方法时,接收器是什么?大概是方法本身,或绑定或东西,但Ruby没有那么深的OO.
无论如何,我不清楚你期望在你的例子中发生什么,你想要它修改本地varialbe吗?如果是这样,proc是方法的合适替代品.
- 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
“functional.rb”是这种编程风格的一个更奢侈的例子.
而“lambda,proc,and Proc.new”是Ruby不同类型闭包的细分.