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/