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

那么给了什么?

4

1 回答 1

4

发生这种情况 b/cObject是其Class自身的超类。(令人困惑的)class Object的一个实例也是如此。Object当您定义实例方法时,Dog不会导致相同的问题 b/c 该类Dog不会出现在的继承链中Class

Object.instance_of?(Class) # True
Class.is_a?(Object) # True
Class.is_a?(Dog) # False
于 2014-01-28T22:02:01.070 回答