web-dev-qa-db-ja.com

変数がクラスのインスタンスであるかどうかを確認するにはどうすればよいですか?

Javaでは、instanceofを実行できます。 Ruby同等のものはありますか?

61
NullVoxPopuli

それはほとんどまったく同じです。 Objectinstance_of?メソッドを使用できます。

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

Rubyにはis_a?メソッドとkind_of?メソッドもあり(これら2つはエイリアスであり、まったく同じように機能します)、trueはスーパークラスの一致の1つを返します。

"a".is_a? String # => true
"a".is_a? Object # => true
124
John Topley

kind_of?およびis_a?は同義語です。これらは、Javaのinstanceofと同等のRubyです。

instance_of?は、オブジェクトがサブクラスではなく、その正確なクラスのインスタンスである場合にのみtrueを返すという点で異なります。

13
user3622081

instance_of?およびkind_of?メソッド。こちらがドキュメントリンクです http://Ruby-doc.org/core/classes/Object.html#M000372

6
Anand Shah

クラスオブジェクトを返すklassで成功しました。これはRails固有のようです。

サンプル使用法:

class Foo
end

Foo.new.klass
# => Foo

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

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

これを実現するメソッドもあります: Object.is_a? 。クラスオブジェクトを引数として受け取り、selfがクラスのインスタンスまたはサブクラスのインスタンスである場合にtrueを返します。

5
Steven