ruby 中的赋值和copy

在ruby 中,你经常会遇到一些相互赋值


比如说


 

a = 1
b = a

a += 1

puts b

按照我们C语言的经验,这个输出是什么了  输出的值为  1 , 也就是说b 不会随着 a 的值变化而变化。


a =[1, 2]
b = a 

a<<3

puts b.inspect

想想看, 现在的输出是多少了? [1, 2] ?  No  结果是 [1, 2, 3]


很神奇吧。。。。。


那有些人就问我, 那我想copy之后,双方就不相互影响怎么办?


有两个办法 dup 和clone


 a= [1, 2]
b = a.dup
a<<3
puts b.inspect


你会发现b 没有受到影响吧。。。。其结果还是[1, 2]


好了,现在我们让a 变得更加复杂点。


a =[[1, 2]]

b = a.dup

a[0] << 3

puts b.inspect

结果是什么, 你会发现你的b 还是受到影响了。。。。。


也就是说使用dup, 只能copy 最表层的数据 使其不受影响。。。。


如果你要copy全部的数据,而不受影响的话, 那就要使用Marshal


a = [[1, 2]]
b = Marshal.load( Marshal.dump(a) )
a[0] << 3
puts b.inspect



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值