From: Yusuke ENDOH Date: 2010-04-17T00:48:18+09:00 Subject: [ruby-dev:41002] Re: [Bug #2226] case 文の式が省略され when 節に配列展開があるときの挙動 wanabe さん 遠藤です。 2009年10月18日6:16 wanabe : > case 文の式が省略され、かつ when 節に配列展開があるときの挙動、 > より具体的には NODE_ARGSCAT, NODE_ARGSPUSH の > コンパイル結果が正しくないように思います。 > 通常の NODE_CASE と同じように処理するのはどうでしょうか。 2010年1月29日2:37 _ wanabe : > まつもとさん(あるいはささださん?) > このチケットについて、よろしければ意見をお聞きしたいのですがどうでしょうか。 > (バグではない、バグだがパッチが正しくない、コミットしてよい、など) 確かにバグだと思いますし、ワナベさんのパッチで正しいと思います。 反対もないようなので、コミットしちゃってください。 ただ、一応、以下の点が非互換になるようです。 $ ruby -ve 'case; when true, *x; p :ok; end' ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] :ok $ ./ruby -ve 'case; when true, *x; p :ok; end' ruby 1.9.2dev (2010-04-16 trunk 27359) [i686-linux] -e:1:in `
': undefined local variable or method `x' for main:Object (NameError) といっても、NODE_CASE の方ではワナベさんのパッチの前から非互換な ようです。 $ ruby -ve 'case "foo"; when "foo", *x; p :ok; end' ruby 1.8.7 (2008-08-11 patchlevel 72) [i486-linux] :ok $ ./ruby -ve 'case "foo"; when "foo", *x; p :ok; end' ruby 1.9.2dev (2010-04-16 trunk 27359) [i686-linux] -e:1:in `
': undefined local variable or method `x' for main:Object (NameError) 実害はほぼないと思うのですが、もし暇だったら見てやってください。 -- Yusuke ENDOH