运行以下代码,
a = [1, 2, 3, 4, 5]
head, *tail = a
p head
p tail
Run Code Online (Sandbox Code Playgroud)
你会得到结果
1
[2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)
谁能帮我解释一下这个说法head,*tail = a,谢谢!
Jor*_*ing 16
head, *tail = a表示将数组的第一个元素赋值a给head,并将其余元素赋值给tail.
*,有时称为"splat运算符",它使用数组做了很多事情.当它位于赋值运算符(=)的左侧时,如在您的示例中,它只是意味着"将所有内容都留下来".
如果你省略了该代码中的splat,它会改为:
head, tail = [1, 2, 3, 4, 5]
p head # => 1
p tail # => 2
Run Code Online (Sandbox Code Playgroud)
但是当你添加splat tail它意味着"所有没有被分配给前面的变量(head)的东西,分配给tail."
首先,它是一个并行分配.在ruby中你可以写
a,b = 1,2
Run Code Online (Sandbox Code Playgroud)
并且a将是1而b将是2.您也可以使用
a,b = b,a
Run Code Online (Sandbox Code Playgroud)
交换值(没有其他语言所需的典型临时变量).
star*是打包/解包操作符.写作
a,b = [1,2,3]
Run Code Online (Sandbox Code Playgroud)
将1分配给a和2分配给b.通过使用星号,值2,3被打包成一个数组并分配给b:
a,*b = [1,2,3]
Run Code Online (Sandbox Code Playgroud)