Project1

标题: 给数组赋值数组的正确写法 [打印本页]

作者: jianyulei    时间: 2019-5-22 20:16
标题: 给数组赋值数组的正确写法
本帖最后由 jianyulei 于 2019-5-22 20:17 编辑

之前我是这么写的
   i ||= Array.new(3) {0}
    $shuzu ||= Array.new(3) {i}
刚才才发现原来是让$shuzu变成了 i 的副本,也就是里面的10个数组其实全都被判定为一个,只要其中一个的数据有变化,其他对应位置的也变化,这也是为什么我一直觉得不对劲,只要数组或哈希里面有2层那么数据就总是加不对

$shuju = Array.new(3) {[0,0,0]} 这样又没问题,但问题是这两种写法不应该一样才对嘛?  i ||= Array.new(3) {0} 得到的就是[0,0,0]啊,就算是写成  i =[0,0,0] 也一样有问题
总之 $shuju = Array.new(3) {} 的里面必须是展开的数组,用其他都不行
F1里说 这是以区块的运算结果作为元素的值。区块对每一个元素分别执行,因此可以让所有元素都是某一对象的副本。但是还是理解不了,如果真是那样我$shuju = Array.new(3) {[0,0,0]} 那么不应该永远是[0,0,0]吗?
请问 $shuju = Array.new(3) {} 这种写法到底是什么意思?另外如果我要给很长的数组赋值很长的数组,甚至给里面每个数组再再赋值很长的数组那么正确写法又是什么?


作者: 喵呜喵5    时间: 2019-5-22 21:02
$shuzu ||= Array.new(3) { Array.new(3){ 0 } }
作者: KB.Driver    时间: 2019-5-22 23:44
$shuzu ||= [[0]*3]*3





欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1