Ruby 如何检查变量是否是类的实例?

Ruby 如何检查变量是否是类的实例?,ruby,inheritance,introspection,Ruby,Inheritance,Introspection,在Java中,您可以执行instanceof。有Ruby的等价物吗 几乎完全一样。您可以使用对象的实例\u?方法: "a".instance_of? String # => true "a".instance_of? Object # => false Ruby还有is\u a?和kind\u?方法(这两种方法是别名,工作原理完全相同),它返回true是超类匹配之一: "a".is_a? String # => true "a".is_a? Object # => tr

在Java中,您可以执行
instanceof
。有Ruby的等价物吗

几乎完全一样。您可以使用
对象
实例\u?
方法:

"a".instance_of? String # => true
"a".instance_of? Object # => false
Ruby还有
is\u a?
kind\u?
方法(这两种方法是别名,工作原理完全相同),它返回
true
是超类匹配之一:

"a".is_a? String # => true
"a".is_a? Object # => true

我成功地使用了
klass
,它返回类对象。这似乎是Rails特有的

示例用法:

class Foo
end

Foo.new.klass
# => Foo

Foo.new.klass == Foo
# => true

Foo.new.klass == "Foo"
# => false

还有一个方法可以实现这一点:,它将类对象作为参数,如果
self
是类的实例或子类的实例,则返回true。

请查看
instance\u of?
kind\u of?
方法。这里是文档链接

的种类
是同义词。它们是Ruby的等价物,相当于Java的
instanceof


instance\u of?
的不同之处在于,如果对象是该确切类的实例,而不是子类的实例,它只返回
true

N.B.据我所知,如果
self
是该参数的子类的实例,则返回false。我希望能选择两个正确的答案。数组没有klass作为方法,但它确实有的实例,但活动记录对象确实有.klass,我认为。
Array.class
也应该可以工作。我在回答中被搞糊涂了,因为我使用的库将class
Object
与方法
class
一起扩展到我的\u实例。klass
不起作用,至少在2020年不起作用,不管有没有Rails
my_instance.class
是获取对象类的正确方法。