From: Koji Arai Date: 2003-08-29T02:27:43+09:00 Subject: [ruby-dev:21277] multiple assignment 新井です。 多重代入の挙動を調べていました。2003-08-28 の変更で return の挙動がおかしくなった部分があるように思われます。 多重代入、ブロックパラメータ、return はそれぞれ同じ挙動を示 すものと考えていたのですが実際のところ空の return は return nil の省略形になっているのですね。 以下の結果が望ましいものなのかどうかご確認ください。 *a = *[]; p a def f; yield; end; f {|*a| p a} def r; return; end; *a = r(); p a => ruby 1.6.8 (2003-08-03) [i586-linux] [] [nil] [nil] => ruby 1.8.0 (2003-08-04) [i586-linux] [] [] [nil] => ruby 1.8.0 (2003-08-28) [i586-linux] [] [] [nil] *a = *[]; p a def f; yield *[]; end; f {|*a| p a} def r; return *[]; end; *a = r(); p a => -:2: warning: `*' interpreted as argument prefix ruby 1.6.8 (2003-08-03) [i586-linux] [] [] [] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-04) [i586-linux] [] [] [nil] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-28) [i586-linux] [] [] [nil] *a = *[1,2]; p a def f; yield *[1,2]; end; f {|*a| p a} def r; return *[1,2]; end; *a = r(); p a => -:2: warning: `*' interpreted as argument prefix ruby 1.6.8 (2003-08-03) [i586-linux] [1, 2] [1, 2] [1, 2] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-04) [i586-linux] [1, 2] [1, 2] [1, 2] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-28) [i586-linux] [1, 2] [1, 2] [[1, 2]] *a = *[*[]]; p a def f; yield *[*[]]; end; f {|*a| p a} def r; return *[*[]]; end; *a = r(); p a => -:2: warning: `*' interpreted as argument prefix ruby 1.6.8 (2003-08-03) [i586-linux] [] [] [] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-04) [i586-linux] [] [] [nil] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-28) [i586-linux] [] [] [nil] *a = *[*[1,2]]; p a def f; yield *[*[1,2]]; end; f {|*a| p a} def r; return *[*[1,2]]; end; *a = r(); p a => -:2: warning: `*' interpreted as argument prefix ruby 1.6.8 (2003-08-03) [i586-linux] [1, 2] [1, 2] [1, 2] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-04) [i586-linux] [1, 2] [1, 2] [1, 2] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-28) [i586-linux] [1, 2] [1, 2] [[1, 2]] a,b,*c = *[[]]; p [a,b,c] def f; yield *[[]]; end; f {|a,b,*c| p [a,b,c]} def r; return *[[]]; end; a,b,*c = r(); p [a,b,c] => -:2: warning: `*' interpreted as argument prefix ruby 1.6.8 (2003-08-03) [i586-linux] [[], nil, []] [nil, nil, []] [[], nil, []] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-04) [i586-linux] [nil, nil, []] [nil, nil, []] [nil, nil, []] => -:2: warning: `*' interpreted as argument prefix ruby 1.8.0 (2003-08-28) [i586-linux] [[], nil, []] [[], nil, []] [nil, nil, []] -- 新井康司 (Koji Arai)