[#76442] [Ruby trunk Feature#11741] Migrate Ruby to Git from Subversion — naruse@...
Issue #11741 has been updated by Yui NARUSE.
3 messages
2016/07/19
[#76515] [Ruby trunk Bug#12610] webrick: protect from httpoxy — nagachika00@...
Issue #12610 has been updated by Tomoyuki Chikanaga.
3 messages
2016/07/22
[ruby-core:76437] [Ruby trunk Feature#12593] Allow compound assignements to work when destructuring arrays
From:
najamelan@...
Date:
2016-07-19 09:05:23 UTC
List:
ruby-core #76437
Issue #12593 has been updated by Naja Melan.
What I propose is to translate the construct:
~~~ ruby
a = 3
b = [ 2 ]
a, b = 2, 3, 4
a == 2
b == 3
# 4 is ignored
a, b = 2
a == 2
b == nil
~~~
That's current behaviour if the number of elements is not the same on both sides.
~~~ ruby
a,b += 2, 3, 4
# translates to:
a = a + 2
b = b + 3
# 4 is ignored.
# `+': no implicit conversion of Fixnum into Array (TypeError)
a, b += 2
a = a + 2
b = b + nil
~~~
If you just translate the statement, There is is no special case to take into account, the interpreter will just do it's job on the translated statement.
Obviously you have to make special accomodation for everything that you want to work:
~~~ ruby
if a, b < c, d # would become:
if a < c && b < d # then && is arbitrary, matter of convention, that someone has to decide on.
~~~
but whatever wouldn't work because nobody has wanted to implement it, well it already doesn't work today, so that's no change then.
----------------------------------------
Feature #12593: Allow compound assignements to work when destructuring arrays
https://bugs.ruby-lang.org/issues/12593#change-59683
* Author: Naja Melan
* Status: Open
* Priority: Normal
* Assignee:
----------------------------------------
~~~ ruby
a = [ 'a', 'b' ]
b = [ 'c', 'd' ]
def c
return [ 'A', 'B' ], [ 'C', 'D' ]
end
a, b += c # -> would be awesome, but gives syntax error
a, b = a + c.first, b + c.last # clunky and will call method twice...
# current realistic use:
t, tt = c
a += t
b += tt
# desired result
#
p a == [ 'a', 'c', 'A', 'B' ] #-> true
p b == [ 'b', 'd', 'C', 'D' ] #-> true
~~~
I would propose that as
~~~ ruby
a, b = [ c, d ] # is equivalent to:
a = c
b = d
a, b += [ c, d ] # would be equivalent to:
a += c
b += d
~~~
This not working surprised me. It could work with all compound assignment operators I think. Maybe even with some other operators.
--
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>