概述
在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
好了,现在我们让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
最后
以上就是傲娇朋友为你收集整理的ruby 中的赋值和copy的全部内容,希望文章能够帮你解决ruby 中的赋值和copy所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复