Project1
标题:
a = b 和 a = b.dup 的区别是什么?
[打印本页]
作者:
gaofei677
时间:
2013-8-11 14:17
标题:
a = b 和 a = b.dup 的区别是什么?
在具体使用a = b 和 a = b.dup这两个方法的过程中发现,大部分情况下他们的作用一样,但是有时候,使用 a = b会出现一些意外
比如:
a = 0
a = b
if a == b
.....
a = 1
end
msgbox(a) => 1
msgbox(b) => 1
复制代码
出现这种使用a = b赋值后,经过一系列计算,a= b 还在工作(这个简单的例子可能没有这种情况)
如果使用a = b.dup,就不会出现上述情况
所以我想问a = b 和 a = b.dup 到底有什么区别,他们分别的工作原理是什么?
作者:
satgo1546
时间:
2013-8-11 14:36
数值、逻辑值等简单对象不允许使用dup,其他对象必须使用dup否则你会无法理解ruby为什么不执行a = b。
事实上a = b后,a和b是两个一样的东西——它们什么都一样,甚至内存地址都一样(大概吧)…………
而a = b.dup或a = b.clone会得出两个内容一样而实质不同的东西。
作者:
怪蜀黍
时间:
2013-8-11 14:53
你的代码写错了,第一行应该是
b = 0
复制代码
最后结果也写错了
msgbox(a) => 1
msgbox(b) => 0
复制代码
数值的话是独立的,b不会随着a改变,但是产生实例之后,要想得到两个相同的实例就要使用dup或者clone。
比如
a = Game_Actor.new(1) # 假定1号角色的攻击力是10
b = a.dup
a.atk = 100
c = a
msgbox(a.atk) => 100
msgbox(b.atk) => 10
msgbox(c.atk) => 100
复制代码
注意,数组的话也要使用dup。不要误认为
a = []
b = a
复制代码
是数值操作,因为
a = []
复制代码
相当于
a = Array.new
复制代码
也是生成了实例。
欢迎光临 Project1 (https://rpg.blue/)
Powered by Discuz! X3.1