为什么Object(类)响应其上定义的实例方法?

时间:2014-01-28 21:45:12

标签: ruby inheritance instance-methods class-method

我今天早些时候遇到过这种行为,并希望有人可以解释为什么会发生这种情况:

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 个答案:

答案 0 :(得分: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