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
QQ截图20190522234528.png
(849 Bytes, 下载次数: 20)
下载附件
保存到相册
2019-5-22 23:45 上传
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1