Issue #10617 has been updated by Martin Drst.


 Just in private:
 
 - Adding some tests to the patch is a good idea.
 
 - If there's no more action, I'd wait for the next call
    for proposals for features in Ruby 2.3,
    then produce a slide summarizing your proposal
    (see e.g. Normalization.pdf on
     https://bugs.ruby-lang.org/issues/10084).
    Such calls normally occur somewhere in the middle
    of the year.
 
 Regards,   Martin.
 
 On 2014/12/30 09:04, recursive.madman / gmx.de wrote:
 > Issue #10617 has been updated by Recursive Madman.
 >
 >
 > I'm not sure if it's decent to push this - I understand 2.2.0 release istaking up a lot of time on the core devs side and holidays are also in progress in some parts of the world, so no hurry here.
 >
 > Anyway, I feel I should ask:
 > * are there any known reasons not to accept this patch?
 > * does the issue need more clarification? #10450 has more information (Iknow that issue's discussion got a bit heated and confusing, which is why I opened this one to limit it to the actual change that was requested)
 >
 > If there's anything more I should do to make this go through (maybe write a test or something?), I'm willing to do.
 >
 > Ahoy.
 >
 > ----------------------------------------
 > Feature #10617: Change multiple assignment in conditional from parse error to warning
 > https://bugs.ruby-lang.org/issues/10617#change-50689
 >
 > * Author: Recursive Madman
 > * Status: Open
 > * Priority: Normal
 > * Assignee:
 > * Category:
 > * Target version:
 > ----------------------------------------
 > There is currently an inconsistency between regular and multiple assignment in conditionals.
 > Regular assignment causes a **warning**, multiple assignment causes a **parse error**.
 >
 > The historical reason for this is that in 1.8 multiple assignment would always return an Array, but since 1.9 it returns whatever the RHS evaluatesto.
 >
 > **Examples:**
 >
 > ```ruby
 > a, b = nil  #=> nil
 > a, b = []   #=> []     (but a and b are both nil)
 > a, b = 1,2  #=> [1, 2]
 > ```
 >
 > Since multiple assignment behavior has changed, it makes sense to removethe (artificial) parse error for multiple assignments.
 >
 > That makes it possible to test the return value of a method used for multiple assignment without having to use a temporary variable.
 >
 > **Example:**
 >
 > ```ruby
 > # CURRENTLY WORKING CODE:
 > tmp = some_method_returning_array_or_nil
 > a, b = tmp
 > if tmp
 >    # method returned an array (possibly empty)
 > else
 >    # method returned nil.
 > end
 >
 > # PROPOSED WORKING CODE:
 > if(a, b = some_method_returning_array_or_nil)
 >    # method returned an array (possibly empty)
 > else
 >    # method returned nil
 > end
 > ```
 >
 > (the parenthesis are needed due to LALR limitations, as discussed in #10450)
 >
 > Attached is a patch that does the necessary change.
 >
 >
 > ---Files--------------------------------
 > 0001-turn-parse-error-on-multiple-assignment-into-warning.patch (752 Bytes)
 >
 >

----------------------------------------
Feature #10617: Change multiple assignment in conditional from parse error to warning
https://bugs.ruby-lang.org/issues/10617#change-50722

* Author: Recursive Madman
* Status: Open
* Priority: Normal
* Assignee: 
* Category: 
* Target version: 
----------------------------------------
There is currently an inconsistency between regular and multiple assignmentin conditionals.
Regular assignment causes a **warning**, multiple assignment causes a **parse error**.

The historical reason for this is that in 1.8 multiple assignment would always return an Array, but since 1.9 it returns whatever the RHS evaluates to.

**Examples:**

```ruby
a, b = nil  #=> nil
a, b = []   #=> []     (but a and b are both nil)
a, b = 1,2  #=> [1, 2]
```

Since multiple assignment behavior has changed, it makes sense to remove the (artificial) parse error for multiple assignments.

That makes it possible to test the return value of a method used for multiple assignment without having to use a temporary variable.

**Example:**

```ruby
# CURRENTLY WORKING CODE:
tmp = some_method_returning_array_or_nil
a, b = tmp
if tmp
  # method returned an array (possibly empty)
else
  # method returned nil.
end

# PROPOSED WORKING CODE:
if(a, b = some_method_returning_array_or_nil)
  # method returned an array (possibly empty)
else
  # method returned nil
end
```

(the parenthesis are needed due to LALR limitations, as discussed in #10450)

Attached is a patch that does the necessary change.


---Files--------------------------------
0001-turn-parse-error-on-multiple-assignment-into-warning.patch (752 Bytes)


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