Hatena::ブログ(Diary)

mic_footprints このページをアンテナに追加 RSSフィード

この日記のはてなブックマーク数

2011年05月23日

[]instance_of?とis_a?の違い 21:03 instance_of?とis_a?の違いを含むブックマーク instance_of?とis_a?の違いのブックマークコメント

instance_of?とis_a?の違いを、メモ。


以下のものを用いて実験

module Foo; end
module Bar; end

class Hoge
  include Foo
end

class Fuga < Hoge
  include Bar
end

fuga = Fuga.new

instance_of?

fuga.instance_of? Fuga #=> true
fuga.instance_of? Hoge #=> false
fuga.instance_of? Object #=> false
fuga.instance_of? Foo #=> false
fuga.instance_of? Bar #=> false
  • selfが、引数で指定されたクラスの直接のインスタンスの場合、trueを返す

is_a?メソッド

fuga.is_a? Fuga #=> true
fuga.is_a? Hoge #=> true
fuga.is_a? Object #=> true
fuga.is_a? Foo #=> true
fuga.is_a? Bar #=> true
  • selfが、引数で指定したクラスの直接のインスタンス、もしくは、そのサブクラスのインスタンスであれば、trueを返す
  • また、モジュールをインクルードしたクラス、もしくは、そのサブクラスのインスタンスであれば、trueを返す

kind_of?メソッド

# aliasを張っているだけなので、is_a?メソッドと同じ
# Hoge === fugaも同様

まとめ

  • instance_of?メソッドはその名の通り、そのクラスのインスタンスかどうかを判定

参考


以上です。

最後までお読みいただきありがとうございました。

トラックバック - http://d.hatena.ne.jp/micdonalds/20110523/1306152207
Connection: close