我得到了錯誤,當我要加倍值添加到一個數組:Ruby的map方法在這種情況下如何工作?
arr = [1,2,3]
def my_mistake(arr)
result = Array.new
arr.map { |element| result << element * 2 }
end
#=> [[2, 4, 6], [2, 4, 6], [2, 4, 6]]
def solution(arr)
arr.map { |element| element * 2 }
end
#=> [2,4,6]
然而,回來我的錯誤和紅寶石地圖方法的定義。
爲每個自我元素調用一次給定的塊。創建一個包含塊返回值的新數組。
我覺得my_mistake方法必須返回[[2], [2, 4], [2, 4, 6]]
但事實並非如此。
大家可以爲我解釋這個案例嗎?
非常感謝,** Patrice **,因爲我的聲望我不能投票:(另外,你能給我鏈接或者你的信息來源嗎?:*結果數組將包含三個相同的引用結果* – 2014-10-05 14:29:49
來自['Array#<<'](http://www.ruby-doc.org/core-2.1.3/Array.html#method-i-3C-3C)的@CuongVu:*「這個表達式返回數組本身,...「* – Stefan 2014-10-05 14:46:33
@CuongVu那麼,正如Stefan指出的那樣,無論這個評估產生什麼樣的副作用,'result << element * 2'的每一個評估都會到達'result',而'result'是一個引用指向內存中的一個且只有一個數組當我說「...將包含三個對同一結果的引用」時,這確實是誤導性的:關於*三次出現的同一個引用*更準確* – 2014-10-05 15:12:11