我想這樣做:紅寶石圖示和<<運營商
a << *b
,但這種情況發生在IRB:
1.9.3p327 :020 > a
=> [1, 2, 3, 4]
1.9.3p327 :021 > b
=> [5, 6, 7]
1.9.3p327 :022 > a << *b
SyntaxError: (irb):22: syntax error, unexpected tSTAR
a << *b
^
我缺少的東西?
我想這樣做:紅寶石圖示和<<運營商
a << *b
,但這種情況發生在IRB:
1.9.3p327 :020 > a
=> [1, 2, 3, 4]
1.9.3p327 :021 > b
=> [5, 6, 7]
1.9.3p327 :022 > a << *b
SyntaxError: (irb):22: syntax error, unexpected tSTAR
a << *b
^
我缺少的東西?
看看這裏的原因:
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a.<<(*b)
# ~> -:3:in `<<': wrong number of arguments (3 for 1) (ArgumentError)
# ~> from -:3:in `<main>'
<<
方法現在預計只有一個argument.So如下圖示(*
)是運營商,這將創建5,6,7
,這<<
方法不希望,而是希望只有一個對象。因此Ruby的設計在b
之前不允許*
。
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a << *
# ~> -:3: syntax error, unexpected *
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a << *b
# ~> -:3: syntax error, unexpected *
# ~> p a << *b
# ~> ^
這就是爲什麼2個合法錯誤:
錯誤的參數數目(3 1)(引發ArgumentError)
語法錯誤,意想不到的*
也許你可以使用 -
a = [1, 2, 3, 4]
b = [5, 6, 7]
p a.push(*b)
# >> [1, 2, 3, 4, 5, 6, 7]
+1的解釋做:) –
簽名類型簽名:ary < < obj→ary。它只需要一個參數。嘗試:a.push(* B)(推(OBJ,...)→元)
試試這個:
a.concat(b)
將輸出:
=> [1, 2, 3, 4, 5, 6, 7]
我曾評論它早期的教,現在將它添加到回答;-)
A + = b會做你的工作
* + 1 *給你..也;) –
我喜歡這個答案,而不是那些試圖解釋如何使用'*'字符出於這個原因:想想看看這個代碼時其他人會如何迴應。你是否明顯知道你在做什麼,或誤導他們?關於Ruby的一個重要的事情是,即使它有一些非常棒的快捷鍵,簡單性也是關於優秀代碼的最大特徵。 –
我同意。但是我也需要明白爲什麼事情會發揮作用,爲什麼他們不這樣做。 –
鑑於
a = [1, 2, 3, 4]
b = [5, 6, 7]
你想解決的辦法是
a.concat b
# => [1, 2, 3, 4, 5, 6, 7]
然而,你可能會發現這個有趣一點
b.each &a.method(:<<)
a
# => [1, 2, 3, 4, 5, 6, 7]
這是說
「b中的每個元素調用方法a#<<
」相當於
b.each &a.method(:push)
a
# => [1, 2, 3, 4, 5, 6, 7]
whoah?|很酷但不太可讀。 –
@MichaelKMadison,我爲你增加了一個更「可讀」的版本...... – naomik
會不會'A + B'對於這種使用情況更直觀? – scones
您可以通過A + = B –