赞 | 9 |
VIP | 0 |
好人卡 | 11 |
积分 | 29 |
经验 | 29235 |
最后登录 | 2023-12-28 |
在线时间 | 713 小时 |
Lv3.寻梦者
- 梦石
- 0
- 星屑
- 2920
- 在线时间
- 713 小时
- 注册时间
- 2010-7-25
- 帖子
- 813
|
加入我们,或者,欢迎回来。
您需要 登录 才可以下载或查看,没有帐号?注册会员
x
本帖最后由 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) {} 这种写法到底是什么意思?另外如果我要给很长的数组赋值很长的数组,甚至给里面每个数组再再赋值很长的数组那么正确写法又是什么?
|
|