我得到了错误,当我要加倍值添加到一个数组: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