2010-09-01 45 views

回答

16

head, *tail = a表示将数组a的第一个元素指定为head,并将其余元素指定为tail

*有时称为“splat操作符”,它对数组做了很多事情。当它位于赋值运算符(=)的左侧时,就像在你的例子中那样,它只是意味着“把所有的东西都留下”。

如果省略代码的图示,它会做这个:

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

但是,当您添加到图示它tail的意思是“这并不会分配给前面的两个变量的一切(head ),分配给tail。“

+0

不错的答案! :)但你真的应该改变你的个人资料图片,你看起来像一个过分修饰的贵宾犬;)嘿嘿 – horseyguy 2010-09-01 14:12:01

+0

哈哈。我以前没有过。我会在劝告下接受。 :) – 2010-09-01 14:29:00

+0

@banister:他目前的照片(可能与当时使用的不一样)使他看起来像贾斯汀比伯! – 2011-09-15 02:15:58

0

我不知道红宝石在所有的,但我的猜测是,该语句分裂列表a成头(第一个元素),其余的(另一个列表),分配新值的变量headtail

这种机制通常被称为(至少在Erlang中)为pattern matching

8

首先,它是一个平行分配。在Ruby中,你可以写

a,b = 1,2 

和为1和B将被2.您也可以使用

a,b = b,a 

交换价值(不包括在其他语言中所需要的典型临时变量)。

星*是包/解包运算符。写作

a,b = [1,2,3] 

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

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