Arrays 为什么Ruby的each_with_对象会删除附加了+=运算符的数据到数组备忘录中?
我被以下Ruby行为难住了: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–返回通过将两个数组连接在一起生成第三个数组而构建的新数组 因此,在每一次迭代
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