2014-01-28 13 views
3

我碰到这种行为在今天早些时候,并希望有人能够解释为什么发生这种情况:为什么Object类会响应在其上定义的实例方法?

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是的,但在这种情况下也是狗。一切都是_a?(对象)。我只是困惑,为什么对象具体会响应其上定义的实例方法。 – loganhasson

回答

4

发生这种情况b/c ObjectClass本身的超类。所以class ObjectObject的一个实例(令人困惑)。当您在Dog定义一个实例方法,你不引起同样的问题,B/C类Dog不会出现在Class

Object.instance_of?(Class) # True 
Class.is_a?(Object) # True 
Class.is_a?(Dog) # False 
相关问题