on parallel assignment

C

Christer Nilsson

The parallel assignment syntax
[a,b] = [c,d] is not allowed

I have to write
a, b = [c,d]

Going deeper
[a, [b, c]] = [1, [2, 3]] is not allowed

I have to write
a, (b, c) = [1, [2, 3]]

I'm sure there is a good reason these constructs are disallowed.
Can somebody enlighten me?

Christer
 
R

Robert Klemme

Christer said:
The parallel assignment syntax
[a,b] = [c,d] is not allowed

The left side is an array constructor. In other words: take value of a
and value of b and create a two element array. There is no assignment
here. You cannot create an array on the left side of an assignment and
try to assign to it:
SyntaxError: compile error
(irb):38: syntax error
[]=[1,2]
^
from (irb):38
from ♥:0
NoMethodError: undefined method `new=' for Array:Class
from (irb):39
from ♥:0
(Array.new) = [1,2,3]
SyntaxError: compile error
(irb):40: syntax error
(Array.new) = [1,2,3]
^
from (irb):40
from ♥:0
I have to write
a, b = [c,d]

I prefer
a,b=1,2 => [1, 2]
a => 1
b
=> 2
Going deeper
[a, [b, c]] = [1, [2, 3]] is not allowed

I have to write
a, (b, c) = [1, [2, 3]]

You can as well do
a,(b,c)=1,[2,3] => [1, [2, 3]]
a => 1
b => 2
c
=> 3

The outermost array is implicit but you must create nested arrays
explicitely.
I'm sure there is a good reason these constructs are disallowed.
Can somebody enlighten me?

Hope so...

Kind regards

robert
 
D

David Vallner

Christer said:
The parallel assignment syntax
[a,b] = [c,d] is not allowed

I have to write
a, b = [c,d]

Going deeper
[a, [b, c]] = [1, [2, 3]] is not allowed

I have to write
a, (b, c) = [1, [2, 3]]

I'm sure there is a good reason these constructs are disallowed.
Can somebody enlighten me?

Christer
You should check out one of the websites that list upcoming syntax
changes in Ruby 2.0 - parallel assignment is undergoing relatively
significant changes to weed out possible ambiguity when it's used.

As well as nested parallel assignment is concerned, I'd say avoid - it's
potentially a very confusing construct, and makes your intent unclear.
Arrays usually imply the storing of values of homogenous type and
purpose - when used in parallel assignment, it means you're most
probably not using them that way, and should probably use a different
data structure to store the information to make your code easier to
understand.

David Vallner
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,780
Messages
2,569,611
Members
45,280
Latest member
BGBBrock56

Latest Threads

Top