确定 Ruby 中的对象类型
Stewart Nguyen
2023年1月30日
在本文中,我们将学习在 Ruby 编程语言中检查对象的类型。
在 Ruby 中使用 #class
确定实例的类名
此方法返回当前实例的类名。例如:
'string'.class
=> String
[].class
=> Array
{}.class
=> Hash
String.class
=> Class
Ruby 是一种面向对象的编程语言,其中的一切都是对象。Classes
也是 Class
类的对象。这就是 String.class
返回 Class
的原因。
在 Ruby 中使用 #class
定义类
class Human; end
alice = Human.new
alice.class
输出:
Human
在 Ruby 中使用 #is_a?
确定实例的类名
如果给定的对象是 class
的实例,则返回 true
;否则,它返回 false
。
'string'.is_a?(String)
=> true
[].is_a?(Hash)
=> false
如果对象是任何子类的实例,#is_a
也会返回 true
。
考虑以下场景:
class Ape; end
class Sapiens < Ape; end
alice = Sapiens.new
alice.is_a?(Sapiens)
输出:
true
alice
是 Sapiens
,但是 alice.is_a?(Ape)
呢?
alice.is_a?(Ape)
输出:
true
令人惊讶的是,alice
也是 Ape
,因为 Sapiens
的祖先数组中包含 Ape
。
Sapiens.ancestors
=> [Sapiens, Ape, Object, Kernel, BasicObject]
从输出中可以看出,Ape
是 Sapiens
的祖先,所以 alice
是 Ape
。