[ruby-core:119664] [Ruby master Bug#20858] multiple parallel assignments are inconsistent
From:
"mame (Yusuke Endoh) via ruby-core" <ruby-core@...>
Date:
2024-11-01 00:42:12 UTC
List:
ruby-core #119664
Issue #20858 has been updated by mame (Yusuke Endoh).
Currently, `a, b = c, d = 3, 4` is interpreted as `a, b = c, (d = 3, 4)`. Whether it is good or not.
----------------------------------------
Bug #20858: multiple parallel assignments are inconsistent
https://bugs.ruby-lang.org/issues/20858#change-110320
* Author: daveola (David Stellar)
* Status: Open
* ruby -v: ruby 3.3.5 (2024-09-03 revision ef084cc8f4) [x86_64-linux]
* Backport: 3.1: UNKNOWN, 3.2: UNKNOWN, 3.3: UNKNOWN
----------------------------------------
I may have terminology wrong, so apologies. For this bug I'm going to use "multiple assignment" to refer to using multiple assignment operators in a line, such as:
``` ruby
a = b = c = 1
```
And then parallel assignment to refer to doing multiple assignments at the same time using tuples, such as:
``` ruby
a,b = 1, 2
```
Unfortunately combining these is inconsistent. First of all, just doing this:
``` ruby
a,b = c,d = 3,4
```
Gives us: **"undefined local variable or method `c' for main (NameError)"**
So if we work around that by defining all our variables, we then get unexpected results:
``` ruby
a = b = c = d = 'foobar'
a,b = c,d = 3,4
puts "Got: a=#{a} b=#{b} and c=#{c} d=#{d}"
# Got: a=foobar b=3 and c=foobar d=3
c,d = 3,4
a,b = c,d
puts "Got: a=#{a} b=#{b} and c=#{c} d=#{d}"
# Got: a=3 b=4 and c=3 d=4
```
I can imagine that if multiple parallel assignment is not supported that a,b will not get set properly, but it does not follow that c would be undefined by the expression.
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/lists/ruby-core.ml.ruby-lang.org/