Arrays 为什么Ruby的each_with_对象会删除附加了+=运算符的数据到数组备忘录中?

Arrays 为什么Ruby的each_with_对象会删除附加了+=运算符的数据到数组备忘录中?,arrays,ruby,Arrays,Ruby,我被以下Ruby行为难住了: result = [1,2,3].each_with_object([]) do |elem, memo| memo << [elem] end puts result.to_s # => [[1], [2], [3]] 有谁能向我解释一下这里发生了什么,以及在上面的上下文中,我应该如何使用+=运算符来处理每个带_的对象吗?根据文档,+=–concatenation–返回通过将两个数组连接在一起生成第三个数组而构建的新数组 因此,在每一次迭代

我被以下Ruby行为难住了:

result = [1,2,3].each_with_object([]) do |elem, memo|
  memo << [elem]
end
puts result.to_s
# => [[1], [2], [3]]
有谁能向我解释一下这里发生了什么,以及在上面的上下文中,我应该如何使用+=运算符来处理每个带_的对象吗?

根据文档,+=–concatenation–返回通过将两个数组连接在一起生成第三个数组而构建的新数组

因此,在每一次迭代中,块结果都被设置为一个新数组,该数组被重置回空数组,该空数组在下一次迭代中用对象方法传递给每个_。考虑下面的内容。

< P>根据DOCS,+= -级联-返回一个新的数组,通过将两个数组串联起来生成第三个数组来构建。
因此,在每一次迭代中,块结果都被设置为一个新数组,该数组被重置回空数组,该空数组在下一次迭代中用对象方法传递给每个_。请考虑下面的内容。

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

在第一个示例中,更改此数组对象

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

通常情况下,最好使用inject,而不是每个带有\u对象的\u。通过inject,新的memo变量将与块的结果一起设置,因此您可以使用非破坏性函数

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

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

在第一个示例中,更改此数组对象

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

通常情况下,最好使用inject,而不是每个带有\u对象的\u。通过inject,新的memo变量将与块的结果一起设置,因此您可以使用非破坏性函数

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