Hi,

In message "Re: [ruby-core:41559] Re: [ruby-trunk - Bug #5730][Open] Optinal block parameters assigns wrong"
    on Fri, 9 Dec 2011 09:36:00 +0900, Tanaka Akira <akr / fsij.org> writes:

|If we break consistency between method invocation and block invocation,
|I think concrete usefulness should be shown.

OK, the point is when

  * block is not a lambda
  * yielded value is an array

we expand the value for the sake of compatibility, i.e.

  def foo(&block)
    block.call([1,2])
  end
  foo{|k,v|
    p [k,v]   # gives [1,2]
  }

and even when some parameters are optional:

  foo{|k,v=6|
    p [k,v]   # gives [1,2] too
  }

but Ruby do NOT expand the value when all parameters are optional:

  foo{|k=5,v=6|
    p [k,v]   # gives [[1,2],6]
  }

|I think the consistency explains current behavior.

From above examples, I consider the current behavior is NOT consistent
at all, under some condition.

The example from Aaron in [ruby-core:41558] uses a proc from method
object, which is not the target of this issue.  I expect the following
behavior

  foo(&->(k=6,v=8){p [k,v]})  # => [[1,2],6]

I don't think fixing this issue does not break any consistency.

							matz.