ruby – 内核#__ method__似乎在动态定义的方法中无法正常工作

我一直在尝试动态定义Ruby 1.9中的一些实例方法.这是我用来尝试这个的代码:

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 > 

我希望结果分别是一和二.如果我在迭代之外调用每个的define_method它按预期工作.我在这里不理解什么?

以下是我在网上看到的在迭代中调用define_method的众多示例之一. Dynamically defined setter methods using define_method?

少了什么东西?

另外:使用__method__对我来说并不重要,但这是我展示的最佳方式,似乎只有发送到define_method的最后一个块才被用于定义的方法.也许这开始向我解释问题,但我仍然不明白..

最佳答案
很好的发现奇怪的行为.在我测试的所有ruby中,只有MRI 1.9.2证明了这一点.

Ryan Davis有reported the bug on the ruby-core list(参考这个问题).

转载注明原文:ruby – 内核#__ method__似乎在动态定义的方法中无法正常工作 - 代码日志