我想了解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)。 –