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



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

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

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

叹息。。。

相关内容

  • 没有找到相关文章

最新更新