gpt4 book ai didi

arrays - 为什么 Ruby 的 each_with_object 会将附加有 += 运算符的数据删除到数组备忘录中?

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

我对以下 Ruby 行为感到困惑:

result = [1,2,3].each_with_object([]) do |elem, memo|
memo << [elem]
end
puts result.to_s
# => [[1], [2], [3]]

上面的代码按照我期望的方式工作。但是,下面的代码似乎只是删除了我试图附加到数组的数字。

result = [1,2,3].each_with_object([]) do |elem, memo|
memo += [elem]
end
puts result.to_s
# => []

谁能向我解释这里发生了什么,以及我应该如何在上述上下文中将 += 运算符与 each_with_object 一起使用?

最佳答案

memo 是局部变量,指向一个数组对象。这些循环变量在每次迭代时设置。

在第一个示例中,您更改了这个数组对象。

在第二个示例中,您使用新数组覆盖局部变量。因为 memo += [elem] 只是 memo = momo + [elem] 的简写旧数组保持为空。

很多时候你最好使用inject而不是each_with_object。使用 inject,新的 memo 变量设置为 block 的结果,因此您可以使用非破坏性函数。

[1,2,3].inject([]) do |memo, elem| 
memo + [elem]
end

关于arrays - 为什么 Ruby 的 each_with_object 会将附加有 += 运算符的数据删除到数组备忘录中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35972499/

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