                On-line Guides All Guides eBook Store iOS / Android Linux for Beginners Office Productivity Linux Installation Linux Security Linux Utilities Linux Virtualization Linux Kernel System/Network Admin Programming Scripting Languages Development Tools Web Development GUI Toolkits/Desktop Databases Mail Systems openSolaris Eclipse Documentation Techotopia.com Virtuatopia.com How To Guides Virtualization General System Admin Linux Security Linux Filesystems Web Servers Graphics & Desktop PC Hardware Windows Problem Solutions Privacy Policy  Ruby Programming
Previous Page Home Next Page

### Parallel Assignment

During your first week in a programming course (or the second semester if it was a party school), you may have had to write code to swap the values in two variables:

 ```int a = 1; int b = 2; int temp; temp = a; a = b; b = temp; ```

You can do this much more cleanly in Ruby:

 ```a, b = b, a ```

Ruby assignments are effectively performed in parallel, so the values assigned are not affected by the assignment itself. The values on the right-hand side are evaluated in the order in which they appear before any assignment is made to variables or attributes on the left. A somewhat contrived example illustrates this. The second line assigns to the variables `a`, `b`, and `c` the values of the expressions `x`, `x+=1`, and `x+=1`, respectively.

 `x = 0` � `0` `a, b, c   =   x, (x += 1), (x += 1)` � `[0, 1, 2]`

When an assignment has more than one lvalue, the assignment expression returns an array of the rvalues. If an assignment contains more lvalues than rvalues, the excess lvalues are set to `nil`. If a multiple assignment contains more rvalues than lvalues, the extra rvalues are ignored. As of Ruby 1.6.2, if an assignment has one lvalue and multiple rvalues, the rvalues are converted to an array and assigned to the lvalue.

You can collapse and expand arrays using Ruby's parallel assignment operator. If the last lvalue is preceded by an asterisk, all the remaining rvalues will be collected and assigned to that lvalue as an array. Similarly, if the last rvalue is an array, you can prefix it with an asterisk, which effectively expands it into its constituent values in place. (This is not necessary if the rvalue is the only thing on the right-hand side---the array will be expanded automatically.)

 `a = [1, 2, 3, 4]` b,  c = a � b == 1, c == 2 b, *c = a � b == 1, c == [2, 3, 4] b,  c = 99,  a � b == 99, c == [1, 2, 3, 4] b, *c = 99,  a � b == 99, c == [[1, 2, 3, 4]] b,  c = 99, *a � b == 99, c == 1 b, *c = 99, *a � b == 99, c == [1, 2, 3, 4]

Ruby Programming
Previous Page Home Next Page Published under the terms of the Open Publication License Design by Interspire