Issue #10617 has been updated by bug hit.


Andrew Vit wrote:
> I think it's too confusing

There is nothing intrinsically confusing about testing an expression that may be truthy or falsy.  One would only be confused if one did not know that it could be either, in which case one should find out and so unconfuse oneself.

The restriction is not there to deal with confusion, it's historical cruft from the time when multiple assignment expression was always truthy, as Yusuke Endoh explained:

> I'll tell you guys the rationale: multiple assignment always used to return an array.
> 
>     $ ./ruby -ve 'p((a, b = nil))'
>     ruby 1.8.7 (2013-06-27 patchlevel 374) [x86_64-linux]
>     [nil]
> 
> This behavior changed since 1.9.0, so the restriction is indeed meaningless now.





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

* Author: Recursive Madman
* Status: Open
* Priority: Normal
* Assignee: 
----------------------------------------
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 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/

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