From: andrew@... Date: 2016-01-24T03:42:06+00:00 Subject: [ruby-core:73345] [Ruby trunk - Feature #10617] Change multiple assignment in conditional from parse error to warning Issue #10617 has been updated by Andrew Vit. I think it's too confusing or ambiguous to allow multiple assignment in conditional. It's very easy to just do the assignment on a previous line. This could be confusing, especially if it comes from splat values: ``` a, b = [false, false] ``` This has been rejected before: https://bugs.ruby-lang.org/issues/10450 ---------------------------------------- Feature #10617: Change multiple assignment in conditional from parse error to warning https://bugs.ruby-lang.org/issues/10617#change-56573 * 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: