Ruby 中的 Kind_of、Instance_of 和 Is_a
Stewart Nguyen
2023年1月30日
在 Ruby 中,我们可能需要不时检查对象类型。有几种方法可以做到这一点,包括 is_a
、kind_of
和 instance_of
。
使用 is_a
检查 Ruby 中的对象类型
让我们从创建我们的类开始:
class Animal; end
dog = Animal.new
我们可以使用 is a?
确定 dog
的类型:
dog.is_a?(String)
# => false
dog.is_a?(Animal)
# => true
Dog
不是字符串。它是 Animal
类的对象。
is_a?
方法很有趣,因为它检查对象的当前类及其祖先。
如果对象的祖先包含与参数匹配的任何类,它将返回 true
。
class Mammal < Animal; end
whale = Mammal.new
鲸鱼是哺乳动物,也是自然界中的动物。在 Ruby 中是什么样的?
Ruby 出色地执行了必要的检查:
whale.is_a?(Mammal)
# => true
whale.is_a?(Animal)
# => true
让我们来看看鲸鱼的祖先:
whale.class.ancestors
输出:
=> [Mammal, Animal, Object, Kernel, BasicObject]
因为返回的数组中存在 Animal
,所以 whale.is a?(Animal)
也是 true
。
在 Ruby 中使用 kind_of?
检查对象的类型
is_a?
是 kind of?
的别名。
dophin = Mammal.new
dophin.kind_of?(Animal)
# => true
dophin.kind_of?(Mammal)
# => true
在 Ruby 中使用 instance_of?
检查对象的类型
与 is a?
不同,instance of?
不检查对象的祖先。如果一个对象是给定类的一个实例,它返回 true
;否则,它返回 false
。
cat = Mammal.new
cat.instance_of?(Mammal)
# => true
cat.instance_of?(Animal)
# => false