case文
case文でちょっとあれ?っと思ったことがあるのでまとめ
tags = [ "A","IMG","PRE" ] tags.each do |tagname| case tagname when "P","A","I","B","BLOCKQUTE" print tagname, " has child.\n" when "IMG","BR" print tagname, " has no child.\n" else print tagname, " cannot be used.\n" end end
これの出力結果は
A has child. IMG has no child. PRE cannot be used.
となるんですけど、ちょっと疑問に思ったことが。
eachメソッドは配列の大きさだけ実行されるからこの場合は3回実行される。
そこで、その一回の実行ごとに2回比較があるのかなーっとふと思いました。
まぁ、ちゃんと考えたらあたりまえのことなんですが・・・
配列を
tags = [ "IMG","PRE","A" ]
と変えたら、1回の実行ごとに2回の比較が行われていないなら、
なにも出力されないんじゃないかな?
っと思って、変えて実行してみましたけど、ちゃんと出力されましたね。
結果は
IMG has no child. PRE cannot be used. A has child.
となりました。
配列の順番が違うので、tagnameに代入される順番が変わってくるので
出力される順番も変わりますね。
ちょっと、あれ?って思ったので、当たり前のことですが、まとめです。