Issue #12104 has been updated by Brian Underwood.


Looking deeper now it seems to be that this is because the first argument is an Array and that when that happens it's interpreting that as the elements of the array being the arguments of the Proc.  Is that supposed to happen?

----------------------------------------
Bug #12104: Procs keyword arguments affect value of previous argument
https://bugs.ruby-lang.org/issues/12104#change-57100

* Author: Brian Underwood
* Status: Open
* Priority: Normal
* Assignee: 
* ruby -v: Tested in 2.3.0 and 2.2.3
* Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
----------------------------------------
This seems like a bug to me:

~~~
2.3.0 :001 > p = Proc.new {|nodes, match_array: false| puts nodes.inspect }
 => #<Proc:0x007fa52c0659e0@(irb):1>
2.3.0 :002 > p.call([])
nil
 => nil
2.3.0 :003 >  p.call([], match_array: true)
[]
 => nil
~~~

When I try the same thing in a method I get the behavior I would expect:

~~~
2.3.0 :004 > def foo(nodes, match_array: false)
2.3.0 :005?>   puts nodes.inspect
2.3.0 :006?>   end
 => :foo
2.3.0 :007 > foo([])
[]
 => nil
2.3.0 :008 > foo([], match_array: true)
[]
~~~




-- 
https://bugs.ruby-lang.org/

Unsubscribe: <mailto:ruby-core-request / ruby-lang.org?subject=unsubscribe>
<http://lists.ruby-lang.org/cgi-bin/mailman/options/ruby-core>