我一直試圖在Ruby 1.9中動態地定義一些實例方法。這是我一直在使用嘗試了這一點代碼:內核#__ method__在動態定義的方法中似乎不能正確工作
class Testing
[:one, :two].each do |name|
define_method(name) do
puts __method__
end
end
end
而這裏的輸出:
ruby-1.9.2-p180 :008 > t = Testing.new
=> #<Testing:0x00000100961878>
ruby-1.9.2-p180 :009 > t.one
two
=> nil
ruby-1.9.2-p180 :010 > t.two
two
=> nil
ruby-1.9.2-p180 :011 >
我希望的結果是one
和two
分別。如果我在調用迭代之外調用define_method
,它會按預期工作。我在這裏不瞭解什麼?
這是我在網上看到的迭代中調用的define_method的許多例子之一。 Dynamically defined setter methods using define_method?
什麼是缺失?
此外:使用__method__
對我來說並不重要,但它是我能夠顯示的最好方式,看起來好像只有發送到define_method
的最後一個塊被用於定義的方法。也許這是開始解釋這個問題給我,但我還是不明白..
我試過你的代碼,它在這裏工作完美,'t.one'打印_「一個」_。 – 2011-02-26 21:21:13
它可能是我的紅寶石版本中的錯誤? *編輯:爲記錄,這是否工作在Ruby 1.8 – Iamvery 2011-02-26 22:31:07
此處確認的行爲(1.9.2),t.one打印「two」。聞起來像一個錯誤。 – steenslag 2011-02-26 23:11:12