为什么ruby方法没有词法范围?

例如

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和Proc.new ”是Ruby不同类型闭包的细分。