From: "marcandre (Marc-Andre Lafortune)" Date: 2013-05-30T00:58:26+09:00 Subject: [ruby-core:55199] [ruby-trunk - Bug #8457][Open] Function arguments: Is this intended? Issue #8457 has been updated by marcandre (Marc-Andre Lafortune). Category set to core Status changed from Closed to Open Assignee set to matz (Yukihiro Matsumoto) I'm wondering too if there isn't something strange? I'd expect a proc to either do an implicit splat or not, but right now it looks for options before doing the implicit splat. Should it not do it after doing the implicit splat? I thought that when a proc had an argument list with more than one element, it was the same to call it with a single array argument than with the same array splatted: Proc{|a, ...| ... }.call([...]) == Proc{|a, ...}| ... }.call(*[...]) # => Because of implicit splat But we have currently: Proc.new{|a, *b, **c| p a, b, c}.call(1,2, bar: 3) # => 1, [2], {:bar=>3} : OK Proc.new{|a, *b, **c| p a, b, c}.call([1,2, bar: 3]) # => 1, [2, {:bar=>3}], {}: Expected same as above Proc.new{|(a, *b), **c| p a, b, c}.call([1,2], bar: 3) # => 1, [2], {:bar=>3} : OK Proc.new{|(a, *b), **c| p a, b, c}.call([[1,2], bar: 3]) # => [1, 2], [{:bar=>3}], {}: Expected same as above So, Matz, what do you think of these simplified examples? ---------------------------------------- Bug #8457: Function arguments: Is this intended? https://bugs.ruby-lang.org/issues/8457#change-39559 Author: boris_stitnicky (Boris Stitnicky) Status: Open Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core 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/