这在Ruby语言中意味着什么?
运行以下代码,
a = [1, 2, 3, 4, 5] head, *tail = a p head p tail
你会得到结果
1 [2, 3, 4, 5]
谁能帮我解释一下声明head,*tail = a
,谢谢!
head, *tail = a
将数组a
的第一个元素分配给head
,并将其余元素分配给tail
。
*
,有时称为“splat运算符”,它使用数组做了很多事情。 当它位于赋值运算符( =
)的左侧时,如在您的示例中,它只是意味着“将所有内容都留下来”。
如果您省略了该代码中的splat,它将执行此操作:
head, tail = [1, 2, 3, 4, 5] p head # => 1 p tail # => 2
但是当你将splat添加到tail
它意味着“所有未被分配给前一个变量( head
)的东西,分配给tail
。”
首先,它是一个并行分配。 在ruby中你可以写
a,b = 1,2
并且a将为1,b将为2.您也可以使用
a,b = b,a
交换值(没有其他语言所需的典型临时变量)。
星*是打包/解包操作符。 写作
a,b = [1,2,3]
将1分配给a和2分配给b。 通过使用星号,值2,3被打包成一个数组并分配给b:
a,*b = [1,2,3]
我根本不认识Ruby,但我的猜测是该语句将列表a
分成头(第一个元素)和其余(另一个列表),将新值分配给变量head
和tail
。
这种机制通常被称为(至少在Erlang中)作为模式匹配 。