0

当在顶层执行定义时,我正在检查在 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同时定义在两个类中!有什么解释吗?

4

1 回答 1

0

这个问题毫无意义,真的。该方法仅在Object. 当然,可以通过单例类获得它,但它没有在那里定义:

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

叹...

于 2012-11-27T16:07:34.997 回答