我今天早些时候遇到过这种行为,并希望有人可以解释为什么会发生这种情况:
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 :(得分:4)
这种情况发生在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