作者godfat (godfat 真常)
看板Ruby
标题Re: [问题] 请问object.dup 和object.clone的差别
时间Sat May 26 12:36:33 2007
※ 引述《softwind (softwind rising)》之铭言:
其实我也不太能分辨 dup 和 clone 的差异,
之前就稍微搜寻了一下 ruby-talk 和 comp.lang.ruby
简单地说的话,dup 和 clone 是几乎相同的,
他们都是执行 shallow copy (1)(相对於 deep copy (2))
http://en.wikipedia.org/wiki/Object_copy#Shallow_copy
差异只在於 clone 会 copy internal state,(你查到的那个)
而 internal state 包含 frozen state 和 tainted state,
前者是 obj.freeze 会造成的,後者跟安全性有关,
你可以再查查,这边就不详细说明这两者了。
也就是说,Ruby 没有预设的 deep copy, 可以用 facets
http://facets.rubyforge.org/
扩充了 deep_copy 和 deep_clone 这两个 method
(1) shallow copy 简单地说就是仅复制 instance 的 reference
e.g., a = Array.new(2, Array.new)
assert a[0].object_id == a[1].object_id
(2) deep copy 简单地说就是连 instance 中的 instance 也要复制
e.g., 同上例的结果会是 false
--
Hear me exalted spirits. Hear me, be you gods or devils, ye who hold
dominion here:
I am a wizard without a home. I am a wonderer seeking refuge.
Sacrifice
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 220.135.28.18