猫の魔法

主にruby系の技術メモを記載

is_a?についてのメモ

Highlineのソースを読んでいたら以下の部分でちょっと考えてしまった。

      if template_or_question.is_a? Question
        template_or_question
      else
        Question.new(template_or_question, answer_type, &details)
      end

悩んだのはtemplate_or_question.is_a? Questionの部分で、名前だけ見るとis_a?ってto_aと同じ意味(つまり配列かどうかを返す)のかと思って読んでいたが、そうすると後ろのQuestionが意味不明。調べてみたらis_a?はObjectのメソッドで、引数のクラスかどうかを返す物だった。

※リファレンスにもあるが、is_a?は対象が「引数 をインクルードしたクラスかそのサブクラス のインスタンスである場合」もtrueになるので、厳密に確認したいならinstanse_of?を使うのが正解。

名前から意味を推測して読むとこう言う落とし穴があるので注意せねば。。。

ちなみに上のソースと同じ文脈で配列かどうかを見るのは、

[1,2,3].is_a? Array

となるみたい。