Я хотел бы понять, как работает define_method
и как правильно использовать переменные за пределами блока определения. Вот мой код:Использование локальных переменных в define_method
class Test
def self.plugin
for i in 1..2
define_method("test#{i}".to_sym) do
p i
end
end
end
plugin
end
ob = Test.new
ob.test1 #=> 2 (I would expect 1)
ob.test2 #=> 2 (I would expect 2)
кажется, что в методах test1
и test2
, значение i
не замещается во время определения, но вычисляется непосредственно на месте, когда вызывается метод. Таким образом, мы видим только последнее значение i
, которое составляет 2
. Но откуда Ruby берет это значение? И есть ли способ дать test#{i}
печать i
?
В этом конкретном случае я мог бы сделать workaround using __method__
, но, вероятно, есть лучшее решение.
сила _closure_ выражается здесь .......... :) Спасибо за –
ссылка, вопрос касается той же проблемы. Но я не уверен, что там предоставлено решение. По крайней мере, один из комментариев не работает:
– overdawnНу .. Без маркировки. Но здесь [аналогичный пост] (http://stackoverflow.com/questions/2029524/how-are-variables-bound-to-the-body-of-a-define-method). –