为什么在main中定义一个方法在Object和main.singleton_class中定义它?

时间:2012-11-26 12:45:08

标签: ruby methods eigenclass

当我在顶级执行定义并且结果令人惊讶时,我正在检查Ruby中定义方法的位置:

def foo; end

singleton_class != Object # => true
self.class == Object      # => true

m1 = singleton_class.instance_method :foo
# => #<UnboundMethod: Object#foo>

m2 = Object.instance_method :foo
# => #<UnboundMethod: Object#foo>

m1 == m2                  # => true

似乎foo同时在两个类中定义!有什么解释吗?

1 个答案:

答案 0 :(得分:0)

这个问题毫无意义,真的。该方法仅在Object中定义。当然,人们可以通过单身人士课程来达到目的,但那里没有定义:

singleton_class.instance_methods(false).grep /foo/  # => []

唉...