# On parallel assignment

**URL:** <https://www.ruby-forum.com/t/on-parallel-assignment/52154>\
**Category:** Ruby\
**Created:** [January 11, 2006, 3:29pm UTC](https://www.ruby-forum.com/t/on-parallel-assignment/52154 "2006-01-11T15:29:35Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![christer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@christer](https://www.ruby-forum.com/u/christer)\
**Post date:** [January 11, 2006, 3:29pm UTC](https://www.ruby-forum.com/t/on-parallel-assignment/52154/1 "2006-01-11T15:29:35Z")

</div>

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

---

<div class="post-metadata">

**Author:** ![christer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@christer](https://www.ruby-forum.com/u/christer)\
**Post date:** [January 11, 2006, 4:00pm UTC](https://www.ruby-forum.com/t/on-parallel-assignment/52154/2 "2006-01-11T16:00:41Z")

</div>

Christer N. wrote:

> 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:

> > []=[1,2]  
> > SyntaxError: compile error  
> > (irb):38: syntax error  
> > []=[1,2]  
> > ^  
> > from (irb):38  
> > from â?¥:0
> 
> > Array.new = [1,2,3]  
> > 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
```

---

<div class="post-metadata">

**Author:** ![christer](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/c/a5b964/32.png) [@christer](https://www.ruby-forum.com/u/christer)\
**Post date:** [January 11, 2006, 4:37pm UTC](https://www.ruby-forum.com/t/on-parallel-assignment/52154/3 "2006-01-11T16:37:16Z")

</div>

Christer N. wrote:

> 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 V.
