Forum: Ruby on parallel assignment

Announcement (2017-05-07): www.ruby-forum.com is now read-only since I unfortunately do not have the time to support and maintain the forum any more. Please see rubyonrails.org/community and ruby-lang.org/en/community for other Rails- und Ruby-related community platforms.
Af95bdaf87958c40150b813e94381bfd?d=identicon&s=25 Christer Nilsson (christer)
on 2006-01-11 15:29
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
5befe95e6648daec3dd5728cd36602d0?d=identicon&s=25 Robert Klemme (Guest)
on 2006-01-11 16:00
(Received via mailing list)
Christer Nilsson 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
430ea1cba106cc65b7687d66e9df4f06?d=identicon&s=25 David Vallner (Guest)
on 2006-01-11 16:37
(Received via mailing list)
Christer Nilsson 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 Vallner
This topic is locked and can not be replied to.