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"]
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
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With