设为首页收藏本站|繁體中文

Project1

 找回密码
 注册会员
搜索
查看: 2126|回复: 3
打印 上一主题 下一主题

[已经解决] 给数组赋值数组的正确写法

[复制链接]

Lv3.寻梦者

梦石
0
星屑
2920
在线时间
713 小时
注册时间
2010-7-25
帖子
813

开拓者

跳转到指定楼层
1
发表于 2019-5-22 20:16:22 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

加入我们,或者,欢迎回来。

您需要 登录 才可以下载或查看,没有帐号?注册会员

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) {} 这种写法到底是什么意思?另外如果我要给很长的数组赋值很长的数组,甚至给里面每个数组再再赋值很长的数组那么正确写法又是什么?

Lv5.捕梦者 (暗夜天使)

只有笨蛋才会看到

梦石
1
星屑
20945
在线时间
9332 小时
注册时间
2012-6-19
帖子
7106

开拓者短篇九导演组冠军

2
发表于 2019-5-22 21:02:54 | 只看该作者
$shuzu ||= Array.new(3) { Array.new(3){ 0 } }

评分

参与人数 1+1 收起 理由
jianyulei + 1 认可答案

查看全部评分

回复 支持 反对

使用道具 举报

Lv5.捕梦者

梦石
10
星屑
39440
在线时间
1914 小时
注册时间
2010-11-14
帖子
3315

R考场第七期纪念奖

3
发表于 2019-5-22 23:44:40 | 只看该作者
$shuzu ||= [[0]*3]*3

点评

这样也没问题呢  发表于 2019-5-23 09:42

评分

参与人数 1+1 收起 理由
jianyulei + 1 精品文章

查看全部评分

用头画头像,用脚写脚本
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

拿上你的纸笔,建造一个属于你的梦想世界,加入吧。
 注册会员
找回密码

站长信箱:[email protected]|手机版|小黑屋|无图版|Project1游戏制作

GMT+8, 2024-4-25 07:51

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表