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

时间:2010-08-06 14:35:49

标签: ruby inheritance introspection

在Java中,您可以instanceof。是否有Ruby等价物?

4 个答案:

答案 0 :(得分:121)

几乎完全一样。您可以使用Object的{​​{1}}方法:

instance_of?

Ruby还有"a".instance_of? String # => true "a".instance_of? Object # => false is_a?方法(这两个是别名,并且工作完全相同),返回kind_of?是超类匹配之一:

true

答案 1 :(得分:11)

kind_of?is_a?是同义词。它们相当于Java的instanceof

instance_of?的不同之处在于,如果对象是该类的实例,而不是子类,它只返回true

答案 2 :(得分:6)

请查看instance_of?kind_of?方法。这是文档链接http://ruby-doc.org/core/classes/Object.html#M000372

答案 3 :(得分: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。