What does * do in front of a string literal in a ruby?

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

[*"a".."z"]
+5
source share
3 answers

It is called the splat operator .

Lvalue split

lvalue , , r, lvalues. lvalue , r, lvalues. lvalue lvalues, rvalues, lvalues, r.

*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

l (U + 002A) - . , , , rvalted lvalue, .

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

Rvalue

rvalue Array Kernel.Array(), rvalues.

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
+12

splat .

0

, . :

*(0..50)

.

In this case, the splat operator requires a receiver to operate. Therefore, do not be fooled into thinking that it is broken in irb just by trying it without a receiver.

0
source

All Articles