From: alxtskrnk@... Date: 2014-12-07T19:26:25+00:00 Subject: [ruby-core:66738] [ruby-trunk - Bug #10450] multiple assignment in conditional Issue #10450 has been updated by bug hit. Yukihiro Matsumoto wrote: > > But I am afraid it's meaningless, since multiple assignment always return an array as its value. > > > Matz. It's absolutely not meaningless, the above assertion is false, multiple assignment does not always return an array. For the forth time, multiple assignment is an expression whose value can be truthy (array) or falsy (`a, b = nil`) It's therefore perfectly reasonable to test in a conditional. ``` if a, b = method_returning_array_or_nil foo else bar end ``` ---------------------------------------- Bug #10450: multiple assignment in conditional https://bugs.ruby-lang.org/issues/10450#change-50330 * Author: bug hit * Status: Rejected * Priority: Normal * Assignee: * Category: * Target version: * ruby -v: ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux] * Backport: 2.0.0: UNKNOWN, 2.1: UNKNOWN ---------------------------------------- multiple assignment is an expression whose value can be truthy (array) or falsy (nil, false), so why is there a restriction on its use in conditionals? A warning perhaps is justified, but a syntax error, why? irb(main):001:0> if a, b = nil then 1 else 0 end SyntaxError: (irb):1: syntax error, unexpected ',', expecting keyword_then or ';' or '\n' if a, b = nil then 1 else 0 end ^ (irb):1: syntax error, unexpected keyword_then, expecting end-of-input if a, b = nil then 1 else 0 end ^ from /home/alex/.rbenv/versions/2.1.4/bin/irb:11:in `
' irb(main):002:0> if (a, b = nil) then 1 else 0 end SyntaxError: (irb):2: multiple assignment in conditional from /home/alex/.rbenv/versions/2.1.4/bin/irb:11:in `
' irb(main):003:0> (a, b = nil) ? 1 : 0 SyntaxError: (irb):3: multiple assignment in conditional from /home/alex/.rbenv/versions/2.1.4/bin/irb:11:in `
' irb(main):004:0> (a, b = nil) => nil -- https://bugs.ruby-lang.org/