Почему объект, класс, реагирует на методы экземпляра, определенные на нем?


Я столкнулся с этим поведением ранее сегодня и надеялся, что кто-нибудь сможет объяснить, почему это происходит:

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 3

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