Почему объект, класс, реагирует на методы экземпляра, определенные на нем?
Я столкнулся с этим поведением ранее сегодня и надеялся, что кто-нибудь сможет объяснить, почему это происходит:
class Object
def some_method
end
end
Object.respond_to?(:some_method) # => true
Конечно, этого не происходит с другими классами:
class Dog
def some_other_method
end
end
Dog.respond_to?(:some_other_method) # => false
Так что же дает?
1 ответ:
Это происходит b/c
Object
является суперклассом самогоClass
. Таким образом,class Object
является примеромObject
(путаница). Когда вы определяете метод экземпляра наDog
, вы не вызываете ту же проблему b/c КлассDog
не появляется в цепочке наследованияClass
Object.instance_of?(Class) # True Class.is_a?(Object) # True Class.is_a?(Dog) # False