Почему определение метода в 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 определяется в двух классах одновременно! Есть объяснения?

1 ответ

Вопрос не имеет смысла, правда. Метод определяется только в Object, Конечно, можно добраться до него через класс синглтона, но он там не определен:

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

Вздох...

Другие вопросы по тегам