繁体   English   中英

这在Ruby语言中意味着什么?

[英]What does this mean in Ruby language?

运行以下代码,

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

交换值(没有其他语言所需的典型临时变量)。

star *是打包/解包操作符。 写作

a,b = [1,2,3]

将1分配给a和2分配给b。 通过使用星号,值2,3被打包成一个数组并分配给b:

a,*b = [1,2,3]

我根本不认识Ruby,但我的猜测是该语句将列表a拆分为头(第一个元素)和其余(另一个列表),将新值分配给变量headtail

这种机制通常被称为(至少在Erlang中)作为模式匹配

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM