Почему определение метода в 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/ # => []
Вздох...