case ... when ... [else ...] end

Ruby は switch ... case でなく、case ... when を採用したわけだが、その由来がわからなかった。今日は Oracle と遊んでいて(仕事です)、もしかして、SQL の CASE 演算子と関係あるんだろうか? と思った。今まで思いつかなかったぁ。


そう考えると

   sex = case val
   when "0"
      "not known"
   when "1"
      "male"
   when "2"
      "female"
   when "9"
      "not specified"
   end

と、値が採れるのも、私の中で今までより受け入れられるようになった。


いや、さらに、

sex = case val when "0" then "not known" when "1" then "male" when "2" then "female" when "9" then "not specified" end

これもできた方が良い様な気がしてきた。


2006-03-17追記: then を入れた。そして動いた!

$ ruby -e 'puts case readline.chomp when "0" then "not known" when "1" then "male" when "2" then "female" when "9" then "not specified" end'

うはっ、キモスw。この感動をリファレンスマニュアルの case の項に伝えたいが、どう伝えたらいいかもどかしい気持ち。「then」って「;」や「改行」と同義なのだろうか?(あとでソースを読む。)


しかし、まつもとさんからは全く RDB の匂いを感じないからなぁ。私の知らない言語由来かなぁ。……あれ? そういや、Postgres モジュールって、オリジナルはまつもとさんだったような。誤印象だな。>匂い