Ruby 如何检查变量是否是类的实例?
在Java中,您可以执行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
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
也应该可以工作。我在回答中被搞糊涂了,因为我使用的库将classObject
与方法class
一起扩展到我的\u实例。klass
不起作用,至少在2020年不起作用,不管有没有Railsmy_instance.class
是获取对象类的正确方法。