gpt4 book ai didi

arrays - `+=` block 内的 `<<` 和 `each_with_object` 之间的区别

转载 作者:太空宇宙 更新时间:2023-11-03 17:10:02 30 4
gpt4 key购买 nike

我不得不更新一个数组,我使用了 +=<<在传递给 Array#each_with_object 的 block 内的不同代码运行中:

代码1

(1..5).each_with_object([]) do |i, a|
puts a.inspect
a += [i]
end

输出:

[]
[]
[]
[]
[]

代码2

(1..5).each_with_object([]) do |i, a|
puts a.inspect
a << [i]
end

输出:

[]
[1]
[1,2]
[1,2,3]
[1,2,3,4]

+=运算符不更新原始数组。为什么?我在这里缺少什么?

最佳答案

each_with_object ,所谓的备忘录对象在迭代中很常见。您需要修改该对象才能做一些有意义的事情。 +=运算符是 + 的语法糖和赋值,它不修改接收器,因此迭代没有效果。如果您使用类似 << 的方法或 push , 那么它就会生效。

另一方面,在inject ,所谓的memo对象就是block的返回值,你不需要修改这个对象,但是你需要在下一次迭代中返回你想要的值。

关于arrays - `+=` block 内的 `<<` 和 `each_with_object` 之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35293688/

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