Project1
标题: 【Ruby】数组的引用 [打印本页]
作者: 寒冷魔王 时间: 2014-10-19 11:19
标题: 【Ruby】数组的引用
本帖最后由 寒冷魔王 于 2014-10-19 11:21 编辑
利用数组类的内部方法使数组引用部分变更的影响失效- # 0
- puts "-------------"
- a = [0,1,2,3,4,5,0]
- b = a
- p b
- p b==a
- p b.eql?(a)
- p b.equal?(a)
- a[0] = 6
- p b
- p b==a
- p b.eql?(a)
- p b.equal?(a)
- # 1
- puts "-------------"
- a= [0,1,2,3,4,5,0]
- b = a.clone
- p b
- p b==a
- p b.eql?(a)
- p b.equal?(a)
- a[0] = 6
- p b
- p b==a
- p b.eql?(a)
- p b.equal?(a)
- # 2
- puts "-------------"
- a= [0,1,2,3,4,5,0]
- b = a.collect
- p b
- p b==a
- p b.eql?(a)
- p b.equal?(a)
- a[0] = 6
- p b
- p b==a
- p b.eql?(a)
- 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 一下吧
a = %w(a b c d e f)
b = a.clone
c = Marshal.load Marshal.dump a
a.each &:clear
p b #=> ["", "", "", "", "", ""]
p c #=> ["a", "b", "c", "d", "e", "f"]
a = %w(a b c d e f)
b = a.clone
c = Marshal.load Marshal.dump a
a.each &:clear
p b #=> ["", "", "", "", "", ""]
p c #=> ["a", "b", "c", "d", "e", "f"]
作者: RyanBern 时间: 2014-10-19 12:18
a = [[1],2,3]
b = a.clone
b[0][0] = 2
p a,b #=>???
c = Marshal.load(Marshal.dump(a))
c[0][0] = 1
p a,c #=>???
a = [[1],2,3]
b = a.clone
b[0][0] = 2
p a,b #=>???
c = Marshal.load(Marshal.dump(a))
c[0][0] = 1
p a,c #=>???
这是传说中的deep clone?
作者: 寒冷魔王 时间: 2014-11-1 20:51
本帖最后由 寒冷魔王 于 2014-11-1 20:53 编辑
@恐惧剑刃 谢谢辛勤地分类~
——还有这贴。
(;´Д`)弄错了不好意思,刃君只是分类
应该呼叫黑熊猫君:@怪蜀黍
欢迎光临 Project1 (https://rpg.blue/) |
Powered by Discuz! X3.1 |