PerlerのRuby日記

Rubyとか

elsifに条件式がない

今日面白いコードを見た。

「elsif」に条件文がなくって、「あれ? これバグじゃね?」と思ったけど結果的にちゃんと動いていた。

a = "Hello, world!"

if /hoge/ === a
  a.downcase!
elsif
  a.upcase!
end

p a #=> "HELLO, WORLD!"

こんな感じ。


たぶん「elsif」のところは「else」って書こうとしたんだと思う。

でも「elsif」の右側に式がないから、

コンテキストに沿って次の行の式が条件判定に使われて、

最初の if が false の場合は、「a.upcase!」が絶対に評価されることになる。

結果的に「else」と同じ意味になるというわけだった。

a = "Hello, world!"

if /hoge/ === a
  a.downcase!
else
  a.upcase!
end

p a #=> "HELLO, WORLD!"

こうなる予定だったのだろう。


これって文法的に間違いではない分、扱いに困る。

いや、直すべきなんだろうけれど。


残念だったのは、代入式だったら警告が出て気がついてくれただろうになーというところ。

if a = "hoge"  #=> warning: found = in conditional, should be ==