例如
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
这有什么理由吗?块有词法范围,为什么不用方法呢?这会被解决吗?
答案 0 :(得分:11)
这是因为Ruby的方法不是第一类对象(例如,它们将在IO中)。所以当你定义内部方法时,接收器是什么?大概是方法本身,或绑定或东西,但Ruby没有那么深的OO。
无论如何,我不清楚你想要在你的例子中发生什么,你想要它修改本地变量a
吗?如果是这样,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不同类型闭包的细分。