Это потому, что методы Ruby не являются объектами первого класса (как, например, в IO ).Итак, когда вы определяете внутренний метод, что является получателем?Предположительно, сам метод, или связывание, или что-то в этом роде, но у Ruby нет такой глубины ОО.
В любом случае, мне непонятно, что вы ожидали, что произойдет в вашем примере, если вы хотите изменить егоместный вариант 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
" functions.rb " является более экстравагантным примером этого стиля программирования.
А " lambda, proc и Proc.new " - это разбивка различных типов замыканий в Ruby.