2010-09-01 94 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]