1.9と1.8でのcase文の違い
今日のruby-listで[http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-list/44769:title=[ruby-list:44769] Ann: Ruby-1.9.0-1 Windowsインストーラパッケージ]というのが流れていたので、会社のパソコンのRubyをアップデート。これで、日本語のファイルも気にせずにあつかえるぜ。
と思っていたんですが、1.8のころに動いていたスクリプトを動かしてみたら、動きませんでした。
僕が書いたわけではないんですが、こんな感じのソース。
hoge = nil case hoge when nil : puts "it's nil" else puts "it's any object" end
case 文の when 節と評価される式(たぶん説明間違ってますよ)を一行に書くときの区切り文字が:(コロン)になっています。
これを1.8で評価すると
$ ruby -v ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0] $ ruby when.rb it's nil
と、ちゃんと実行されるんですが、1.9で行うと
$ ./ruby -v ruby 1.9.0 (2008-02-23 revision 15580) [i686-darwin9.2.0] $ ./ruby when.rb when.rb:6: syntax error, unexpected ':', expecting keyword_then or ',' or ';' or '\n' when nil : puts "it's nil" ^ when.rb:7: syntax error, unexpected keyword_else, expecting $end else puts "it's any object" ^
のように怒られてしまいます。
家帰ってからプログラミングRubyで調べよと思ったのですが、だれかに隠されてしまったようでみあたらない。しょうがないので、google先生に聞いたら、そもそも1.8のころにコロンがつかえるという情報がみつからない。
もともとの使い方が間違いだったのかしら。そして、これ書いた人は、どこでその知識を知ったんだろう。