Project1

标题: 【Ruby】数组的引用 [打印本页]

作者: 寒冷魔王    时间: 2014-10-19 11:19
标题: 【Ruby】数组的引用
本帖最后由 寒冷魔王 于 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   
作者: 铅笔描绘的思念    时间: 2014-10-19 11:40
没想到单纯的引用一个数组原数组变化还会影响引用到得地方。。。
作者: chd114    时间: 2014-10-19 11:43
铅笔描绘的思念 发表于 2014-10-18 18:40
没想到单纯的引用一个数组原数组变化还会影响引用到得地方。。。

我也是单纯的P一下,就影响了返回值···
作者: taroxd    时间: 2014-10-19 12:10
本帖最后由 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"]

作者: RyanBern    时间: 2014-10-19 12:18
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-11-1 20:51
本帖最后由 寒冷魔王 于 2014-11-1 20:53 编辑

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

(;´Д`)弄错了不好意思,刃君只是分类
应该呼叫黑熊猫君:@怪蜀黍  




欢迎光临 Project1 (https://rpg.blue/) Powered by Discuz! X3.1