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

Project1

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

[讨论] 关于push命令

[复制链接]

Lv1.梦旅人

梦石
0
星屑
50
在线时间
46 小时
注册时间
2011-9-13
帖子
55
跳转到指定楼层
1
发表于 2012-10-21 04:10:19 | 显示全部楼层 回帖奖励 |倒序浏览 |阅读模式

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

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

x
本帖最后由 最后的信徒 于 2012-10-21 19:14 编辑

不知道各位有没有遇到过这样的事
请你先猜猜以下代码所输出的值
然后自己运行看看
  1. a = []
  2. b = []
  3. b[0]=0
  4. for i in 1..5
  5.   b[1]=rand(5)
  6.   a.push(b)
  7.   p a
  8. end
复制代码
请再看6楼

Lv1.梦旅人

梦石
0
星屑
50
在线时间
46 小时
注册时间
2011-9-13
帖子
55
2
 楼主| 发表于 2012-10-21 18:10:48 | 显示全部楼层
本帖最后由 最后的信徒 于 2012-10-21 18:18 编辑

@电锤斧王@serena718
输出结果有5个,
第一次循环:假设b[1]=1,则输出[[0,1]]
第二次循环:假设b[1]=2,则输出[[0,2],[0,2]]           》》》》为什么不是[[0,1],[0,2]]呢???!!!
......
由此可见,第一次循环所"push"的值,被后面的值更新了。


要不我们改改代码
  1. a=[]
  2. b=[]
  3. b[0]=0
  4. for i in 1..5
  5. b[1]=i
  6. a.push(b)
  7. p a
  8. end
复制代码
理想输出的值:
[[0,1]]
[[0,1],[0,2]]
[[0,1],[0,2],[0,3]]
[[0,1],[0,2],[0,3],[0,4]]
[[0,1],[0,2],[0,3],[0,4],[0,5]]

实际输出的值:
[[0,1]]
[[0,2],[0,2]]
[[0,3],[0,3],[0,3]]
[[0,4],[0,4],[0,4],[0,4]]
[[0,5],[0,5],[0,5],[0,5],[0,5]]



为什么会这样呢????

点评

b[1] = i 这句话,已经把原来的b[1]覆盖了。而在数组里push 的是b ,而不是[0,i]。  发表于 2012-11-8 10:05
clone 返回该对象的浅拷贝  发表于 2012-10-24 19:01
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-5-14 17:07

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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