Re: [問題] 請問object.dup 和object.clone的差別
※ 引述《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
討論串 (同標題文章)
Ruby 近期熱門文章
PTT數位生活區 即時熱門文章