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


Answers:


139

几乎完全一样。您可以使用Objectinstance_of?方法:

"a".instance_of? String # => true
"a".instance_of? Object # => false

Ruby还具有is_a?andkind_of?方法(这两个是别名,并且工作方式完全相同),返回的true是超类匹配项之一:

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

1
NB据我所知,如果self是参数的子类的实例,则返回false 。
史蒂文

15

kind_of?并且is_a?是同义词。它们与Ruby等效,与Java等效instanceof

instance_of?不同之处在于,它仅true在对象是该确切类的实例而不是子类的实例时返回。



5

我已经成功 klass,它返回了类对象。这似乎是特定于Rails的。

用法示例:

class Foo
end

Foo.new.klass
# => Foo

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

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

还有一种方法可以完成此任务:Object.is_a?,该方法将类对象作为参数,如果self是类的实例或子类的实例,则返回true 。


我希望我能选择两个正确的答案。我认为,数组没有klass作为方法,但是它确实具有instance_of,但active_record对象确实具有.klass。
NullVoxPopuli

Array.class应该也一样。我的答案很混乱,因为我正在使用的库是Object带有method的extends类class
史蒂文

my_instance.klass无论有没有Rails,至少在2020年都无法使用。my_instance.class是获取对象类的正确方法。
David Hempy
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.