運行下面的代碼,這在Ruby語言中意味着什麼?
a = [1, 2, 3, 4, 5]
head, *tail = a
p head
p tail
你會得到的結果
1
[2, 3, 4, 5]
誰能幫我解釋聲明head,*tail = a
,謝謝!
運行下面的代碼,這在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操作符」,它對數組做了很多事情。當它位於賦值運算符(=
)的左側時,就像在你的例子中那樣,它只是意味着「把所有的東西都留下」。
如果省略代碼的圖示,它會做這個:
head, tail = [1, 2, 3, 4, 5]
p head # => 1
p tail # => 2
但是,當您添加到圖示它tail
的意思是「這並不會分配給前面的兩個變量的一切(head
),分配給tail
。「
我不知道紅寶石在所有的,但我的猜測是,該語句分裂列表a
成頭(第一個元素),其餘的(另一個列表),分配新值的變量head
和tail
。
這種機制通常被稱爲(至少在Erlang中)爲pattern matching。
首先,它是一個平行分配。在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]
不錯的答案! :)但你真的應該改變你的個人資料圖片,你看起來像一個過分修飾的貴賓犬;)嘿嘿 – horseyguy 2010-09-01 14:12:01
哈哈。我以前沒有過。我會在勸告下接受。 :) – 2010-09-01 14:29:00
@banister:他目前的照片(可能與當時使用的不一樣)使他看起來像賈斯汀比伯! – 2011-09-15 02:15:58