作者softwind (softwind rising)
看板Ruby
标题[问题] 请问object.dup 和object.clone的差别
时间Sat May 26 10:55:58 2007
环境:
Ruby 1.8 + WinXP
状况:
其实不算是使用上的问题 比较属於是文件看不懂
想请教一下 object.dup 和 .clone的差别
小弟主要是看安装完後的 RubyBook Help文件
和中文书 Ruby programming-向Ruby 之父学程式设计
我有在 Observable module中
看到类似
for in in @observer_peers.dup
i.update(*arg)
end
然後 当然要看一下 dup的用法
它的原文文件说明如下
obj.dup -> anObject
Produces a shallow copy of obj---the instance variables of obj are copied,
but not the objects they reference.
dup copies the tainted state of obj.
See also the discussion under Object#clone .
In general, clone and dup may have different semantics in descendent classes.
While clone is used to duplicate an object, including its internal state,
dup typically uses the class of the descendent object
to create the new instance.
这里是说 obj.dup时 会建立一个新的obj 而该obj会包含原先instance variable的值
但是不会进行COPY的动作 即 如果原先instance variable是指向某一个obj2
那麽不会呼叫 obj2.new 然後存到对应的 instance variable
不知道是不是这个意思? (and "tainted state of obj"该如何解释?)
还有请问 这里的 .dup 和 .clone 有差异吗?
文件里写说 including its "internal state"
请问internal state 是指哪个部分??
而在 obj.clone中说
... Copies the frozen and tainted state of obj.
这里的 "frozen state" 又是指哪个部份?
附录:
1. Observable的说明在
http://corelib.rubyonrails.org/ class Observable里
2. obj.clone的范例
class Klass
attr_accessor :str
end
s1 = Klass.new #<Klass:0x401b34f0>
s1.str = "Hello" "Hello"
s2 = s1.clone #<Klass:0x401b320c @str="Hello">
s2.str[1,4] = "i" "i"
s1.inspect "#<Klass:0x401b34f0 @str=\"Hi\">"
s2.inspect "#<Klass:0x401b320c @str=\"Hi\">"
obj.clone了以後 其实还是指到同一个物件 对吧
谢谢您的回应
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.129.27.216