2014-01-28 4 views
3

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

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 

Так что это дает?

+0

класса 'Object' сам по себе является' Object'. 'Object.is_a? (Object)' –

+0

@JonathanLonowski Да, но и собака в этом случае. Все is_a? (Объект). Я просто смущен тем, почему Object специально реагирует на методы экземпляра, определенные на нем. – loganhasson

ответ

4

Это происходит b/c Object является суперклассом Class. Таким образом, class Object является экземпляром Object (сбивает с толку). При определении метода экземпляра на Dog вы не вызвать один и тот же вопрос б/с классом Dog не появляется в наследстве цепи Class

Object.instance_of?(Class) # True 
Class.is_a?(Object) # True 
Class.is_a?(Dog) # False