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

Nul*_*uli 62 ruby inheritance introspection

在Java中,你可以做到instanceof.是否有Ruby等价物?

Joh*_*ley 127

它几乎完全一样.你可以用Objectinstance_of?方法:

"a".instance_of? String # => true
"a".instance_of? Object # => false
Run Code Online (Sandbox Code Playgroud)

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

"a".is_a? String # => true
"a".is_a? Object # => true
Run Code Online (Sandbox Code Playgroud)


小智 13

kind_of?并且is_a?是同义词.它们是Ruby相当于Java的instanceof.

instance_of?不同之处在于,只有true当对象是该确切类的实例而不是子类时,它才会返回.


Ana*_*hah 6

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

  • 我会尝试is_a?同样. (4认同)

Ste*_*ven 5

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

样品用法:

class Foo
end

Foo.new.klass
# => Foo

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

Foo.new.klass == "Foo"
# => false
Run Code Online (Sandbox Code Playgroud)

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