tags:

views:

84

answers:

2

This code seems to create an array with a range from a to z but I don't understand what the * does. Can someone please explain?

[*"a".."z"]
+9  A: 

It's called splat operator.

Splatting an Lvalue

A maximum of one lvalue may be splatted in which case it is assigned an Array consisting of the remaining rvalues that lack corresponding lvalues. If the rightmost lvalue is splatted then it consumes all rvalues which have not already been paired with lvalues. If a splatted lvalue is followed by other lvalues, it consumes as many rvalues as possible while still allowing the following lvalues to receive their rvalues.

*a = 1
a #=> [1]

a, *b = 1, 2, 3, 4
a #=> 1
b #=> [2, 3, 4]

a, *b, c = 1, 2, 3, 4
a #=> 1
b #=> [2, 3]
c #=> 4

Empty Splat

An lvalue may consist of a sole asterisk (U+002A) without any associated identifier. It behaves as described above, but instead of assigning the corresponding rvalues to the splatted lvalue, it discards them.

a, *, b = *(1..5)
a #=> 1
b #=> 5

Splatting an Rvalue

When an rvalue is splatted it is converted to an Array with Kernel.Array(), the elements of which become rvalues in their own right.

a, b = *1
a #=> 1
b #=> nil

a, b = *[1, 2]
a #=> 1
b #=> 2

a, b, c = *(1..2), 3
a #=> 1
b #=> 2
c #=> 3
Simone Carletti
Aside from assigning values, you can also use the splat operator in defining methods: `def do_it(arg1, *args)`. Now you can call `do_it(1, 2)` and `do_it(1, 2, 3, 4)`.
Ariejan
A: 

The splat operator expands the range into an array.

YouMustLeaveNow