From: "phluid61 (Matthew Kerwin)" Date: 2013-05-29T10:54:02+09:00 Subject: [ruby-core:55191] [ruby-trunk - Bug #8457] Function arguments: Is this intended? Issue #8457 has been updated by phluid61 (Matthew Kerwin). =begin boris_stitnicky (Boris Stitnicky) wrote: > a = [1, 2, x: 3] > a.tap { |*p, q| a.clear.concat p } #=> [1, 2] > > but > > a = [1, 2, x: 3] > a.tap { |*p, **q| a.clear.concat p } #=> [[...]] > > and also > > a = [1, 2] > a.tap { |*p| a.clear.concat p } #=> [[...]] > > ??? Is this the problem? a = [1,2,x:3] a.tap { |*p,**q| puts "p=#{p.inspect}, q=#{q.inspect}" } # prints: p=[[1, 2, {:x=>3}]], q={} # expected: p=[1, 2], q={:x=>3} as per: a = [1,2,x:3] def foo(*p,**q) puts "p=#{p.inspect}, q=#{q.inspect}"; end foo *a # prints: p=[1, 2], q={:x=>3} ? Note that the same behaviour occurs if the block has a (({**})) parameter. (Tried on ruby 2.1.0dev (2013-04-24 trunk 40439) [x86_64-linux] ) =end ---------------------------------------- Bug #8457: Function arguments: Is this intended? https://bugs.ruby-lang.org/issues/8457#change-39553 Author: boris_stitnicky (Boris Stitnicky) Status: Closed Priority: Normal Assignee: Category: Target version: ruby -v: 2.0.0 Backport: 1.9.3: UNKNOWN, 2.0.0: UNKNOWN a = [1, 2, x: 3] a.tap { |*p, q| a.clear.concat p } #=> [1, 2] but a = [1, 2, x: 3] a.tap { |*p, **q| a.clear.concat p } #=> [[...]] and also a = [1, 2] a.tap { |*p| a.clear.concat p } #=> [[...]] ??? -- http://bugs.ruby-lang.org/