我面临着一些我不完全理解的事情。
我有一个数组,其元素是数组。
所以我有两个嵌套循环,在内部循环中我填充我的内部数组,然后在外部循环中我用内部数组填充外部数组。
arr=[]
mat=[]
for m in (0..1)
for k in (0..1)
arr[k]=rand.to_s
end
mat[m]=arr
end
最后我的矩阵充满了两个数组;每个数组都包含在最后一次迭代中计算的值。如果我希望矩阵中的第一个元素包含第一个计算数组,我必须在每个循环中重新初始化 arr 对象。所以似乎分配是通过引用进行的,直到 arr 对象被“清理”。如果我添加
mat[m]=arr
arr=[]
一切都按预期工作: mat[0] 将包含在第一个循环中计算的数组,而 mat[1] 将包含在第二个循环中计算的数组。
这是设计使然还是副作用?仅当我将数组分配为数组元素时才会发生这种情况。如果如果在循环中用简单的字符串变量填充数组,则一切都按预期进行。
我知道避免重用对象是一种很好的编程习惯,但这种行为无论如何都很奇怪。