What does this mean in Ruby language?

后端 未结 3 1935
孤城傲影
孤城傲影 2021-01-06 01:05

Run the following code,

a = [1, 2, 3, 4, 5]
head, *tail = a
p head
p tail

You will get the result

1
[2, 3, 4, 5]

3条回答
  •  走了就别回头了
    2021-01-06 01:33

    head, *tail = a means to assign the first element of the array a to head, and assign the rest of the elements to tail.

    *, sometimes called the "splat operator," does a number of things with arrays. When it's on the left side of an assignment operator (=), as in your example, it just means "take everything left over."

    If you omitted the splat in that code, it would do this instead:

    head, tail = [1, 2, 3, 4, 5]
    p head # => 1
    p tail # => 2
    

    But when you add the splat to tail it means "Everything that didn't get assigned to the previous variables (head), assign to tail."

提交回复
热议问题