gpt4 book ai didi

ruby-on-rails - 在这种情况下,Ruby 的 map 方法如何工作?

转载 作者:数据小太阳 更新时间:2023-10-29 07:15:59 30 4
gpt4 key购买 nike

我想将双倍值添加到数组时出错了:

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]

但是,回到我的错误和 Ruby 中 ma​​p 方法的定义。

Invokes the given block once for each element of self. Creates a new array containing the values returned by the block.

我认为 my_mistake 方法必须返回 [[2], [2, 4], [2, 4, 6]] 但它没有。

谁能给我解释一下这个案例?

最佳答案

结果数组将包含三个对同一数组的相同引用,如 result是表达式 result << element * 2 的结果.所以 map 的结果是(某种)[result, result, result] .这些都指向相同的内容,也就是result的内容在流程结束时 ( [2, 4, 6] )。

如果您在每个点都克隆数组,那么您期望的结果将会实现,这样每个结果元素都会指向一个不同的数组,并且每次添加都不会影响之前计算的数组:

arr.map { |element| (result << element * 2).clone }
=> [[2], [2, 4], [2, 4, 6]]

关于ruby-on-rails - 在这种情况下,Ruby 的 map 方法如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26201908/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com