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

Project1

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

[已经解决] 【Ruby】数组的引用

[复制链接]

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
跳转到指定楼层
1
发表于 2014-10-19 11:19:13 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

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

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

x
本帖最后由 寒冷魔王 于 2014-10-19 11:21 编辑

利用数组类的内部方法使数组引用部分变更的影响失效
  1. # 0
  2. puts "-------------"
  3. a = [0,1,2,3,4,5,0]
  4. b = a
  5. p b
  6. p b==a
  7. p b.eql?(a)
  8. p b.equal?(a)
  9. a[0] = 6
  10. p b
  11. p b==a
  12. p b.eql?(a)
  13. p b.equal?(a)
  14. # 1
  15. puts "-------------"
  16. a= [0,1,2,3,4,5,0]
  17. b = a.clone
  18. p b
  19. p b==a
  20. p b.eql?(a)
  21. p b.equal?(a)
  22. a[0] = 6
  23. p b
  24. p b==a
  25. p b.eql?(a)
  26. p b.equal?(a)
  27. # 2
  28. puts "-------------"
  29. a= [0,1,2,3,4,5,0]
  30. b = a.collect
  31. p b
  32. p b==a
  33. p b.eql?(a)
  34. p b.equal?(a)
  35. a[0] = 6
  36. p b
  37. p b==a
  38. p b.eql?(a)
  39. p b.equal?(a)
复制代码
@taroxd   
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------

Lv3.寻梦者

梦石
0
星屑
1024
在线时间
1389 小时
注册时间
2010-8-9
帖子
3471
6
 楼主| 发表于 2014-11-1 20:51:08 | 只看该作者
本帖最后由 寒冷魔王 于 2014-11-1 20:53 编辑

@恐惧剑刃 谢谢辛勤地分类~
——还有这贴。

(;´Д`)弄错了不好意思,刃君只是分类
应该呼叫黑熊猫君:@怪蜀黍  
SRPG on RM 项目研发组 正式成立。目前SRPG·RMVA系统进度88.8%。SMRC Kernel 进度90%
↖(^ω^)↗热烈庆祝~SMRC Ver5.1 SRPG战棋地图移动范围生成脚本正式发布~~
-----------------------------------------------------------------------------------------
SMRC具有高性能、高兼容、定制自由、使用方便的特点。
1.性能,100移动力轻松算出,无压力;
2.兼容,RGSS1-3通吃,效率保证;
3.支持移动形状定制,支持4方位、6方位、正方形或其他任意有移动规律的形状;
4.可以充当高性能寻路来使用。
【链接点此】
-----------------------------------------------------------------------------------------
【2016/01/06更新 | 改版】RM脚本编辑器Gemini
-----------------------------------------------------------------------------------------
回复 支持 反对

使用道具 举报

Lv4.逐梦者 (版主)

梦石
0
星屑
9532
在线时间
5073 小时
注册时间
2013-6-21
帖子
3580

开拓者贵宾剧作品鉴家

5
发表于 2014-10-19 12:18:33 | 只看该作者
RUBY 代码复制
  1. a = [[1],2,3]
  2. b = a.clone
  3. b[0][0] = 2
  4. p a,b #=>???
  5. c = Marshal.load(Marshal.dump(a))
  6. c[0][0] = 1
  7. p a,c #=>???

这是传说中的deep clone?

点评

知道了,深层的将内部的数组都给复制了。  发表于 2014-10-19 15:20
不过日常使用也没啥要deep clone 的东西……  发表于 2014-10-19 12:37
很方便!  发表于 2014-10-19 12:29
要 deep clone 的话这个确实是比较方便的方法了吧。  发表于 2014-10-19 12:21
回复 支持 反对

使用道具 举报

Lv3.寻梦者 (版主)

…あたしは天使なんかじゃないわ

梦石
0
星屑
2208
在线时间
4033 小时
注册时间
2010-10-4
帖子
10779

开拓者贵宾

4
发表于 2014-10-19 12:10:56 | 只看该作者
本帖最后由 taroxd 于 2014-10-19 12:24 编辑

clone 也只是浅复制而已。要深度复制的话还是 Marshal 一下吧

RUBY 代码复制
  1. a = %w(a b c d e f)
  2. b = a.clone
  3. c = Marshal.load Marshal.dump a
  4. a.each &:clear
  5. p b #=> ["", "", "", "", "", ""]
  6. p c #=> ["a", "b", "c", "d", "e", "f"]
回复 支持 反对

使用道具 举报

Lv4.逐梦者

梦石
0
星屑
9280
在线时间
2504 小时
注册时间
2011-5-20
帖子
15389

开拓者

3
发表于 2014-10-19 11:43:58 | 只看该作者
铅笔描绘的思念 发表于 2014-10-18 18:40
没想到单纯的引用一个数组原数组变化还会影响引用到得地方。。。

我也是单纯的P一下,就影响了返回值···

点评

那是你自己的问题  发表于 2014-10-19 12:18
[img]http://service.t.sina.com.cn/widget/qmd/5339802982/c02e16bd/7.png
回复 支持 反对

使用道具 举报

Lv3.寻梦者

梦石
0
星屑
1384
在线时间
962 小时
注册时间
2012-4-30
帖子
1475

开拓者

2
发表于 2014-10-19 11:40:11 | 只看该作者
没想到单纯的引用一个数组原数组变化还会影响引用到得地方。。。

点评

因为数组名只是一个引用 传引用自然是共享同一地址  发表于 2014-11-8 21:48
水区人多……  发表于 2014-10-19 15:07
不过不在技术讨论去在水区发好么。。。。  发表于 2014-10-19 11:40
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2024-11-27 12:11

Powered by Discuz! X3.1

© 2001-2013 Comsenz Inc.

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