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
となるみたい。