小编ac7*_*c7v的帖子

可变值在ruby中无意中重新分配

我还在学习红宝石的基础知识,所以我想我会尝试制作一个乘法表

x = (0..7).to_a
y = []
x.each { y << x }
Run Code Online (Sandbox Code Playgroud)

y现在是一个8x8阵列,每行相等.这些只是我不想要的占位符值,所以我尝试迭代数组索引来更改值.

x.each { |i| y[i][i] = i * i }
Run Code Online (Sandbox Code Playgroud)

此时,y成为一个包含8列的数组[0, 1, 4, 9, 16, ...].我理解为什么我只接收平方值,但我不明白为什么y[1][3],例如,当我只希望改变索引的值时[1][1],它[2][2]会被改变.

进而,价值x被重新分配给[0, 1, 4, 9, 16, ...]为好,尽管我从来没有故意重新分配其价值.通过上面的代码部分,它的值会自动重新分配,我无法理解为什么.

我总是可以自己查找另一种制作这样一个表的方法,但是我想了解发生了什么x导致它改变它的值以及为什么迭代遍历索引的行为不符合预期.当我可以理解为什么我更简单的尝试产生无效输出时,我将继续在2D数组的每个索引上更正确地迭代.我想自己弄清楚这个相当基本的任务,但我现在遇到了障碍.

ruby arrays iteration multidimensional-array

1
推荐指数
1
解决办法
111
查看次数

标签 统计

arrays ×1

iteration ×1

multidimensional-array ×1

ruby ×1