From: Shin-ichro Hara Date: 1998-11-17T17:32:36+09:00 Subject: [ruby-dev:3587] Multiple assignment at yield() 原です。 yield(foo, *bar) というような * による変数の展開はできるの ですが、 def foo(a) yield(*a) end foo([3]) { |x| p x } の結果は [3] です。これは 3 の方がいいと思うのだけどどうで すか? ブロックパラメータが値を受けるメカニズムは一応理解している つもりです。これは [ruby-dev:867] に述べられている通りです よね。再掲します。 ---------------------------------- foo = Proc.new { |*x| p x } foo.call() #=> [] foo.call(1) #=> [1] foo.call(2,3) #=> [2,3] bar = Proc.new { |x| p x } bar.call() #=> nil bar.call(25) #=> 25 bar.call(25, 26)#=> [25,26] baz = Proc.new { |x,y| p [x,y] } baz.call() #=>[nil,nil] baz.call(25) #=>[25,nil] baz.call(25, 26)#=>[25,26] ---------------------------------- 今回のは値を送る方の問題だと思うのだけど。 ついでに、、、 foo, = 1, 2, 3 foo, = *[1, 2, 3] *foo = 1, 2, 3 *foo = *[1, 2, 3] はいいのだけど、 foo = 1, 2, 3 foo = *[1, 2, 3] が parse error になるけど、これはそういうものなんでしたっけ? そういうものなんでしょうね。