यह सच है कि एक वस्तु का clone
प्रतियां frozen
राज्य, पाया, जबकि dup
नहीं करता है:
o = Object.new
o.freeze
o.clone.frozen?
#=> true
o.dup.frozen?
#=> false
clone
ऑब्जेक्ट के सिंगलटन विधियों की प्रतिलिपि भी करेगा जबकि dup
नहीं है:
o = Object.new
def o.foo
42
end
o.clone.respond_to?(:foo)
#=> true
o.dup.respond_to?(:foo)
#=> false
जो मुझे लगता है कि clone
को कभी-कभी dup
से "गहरी" प्रति प्रदान करने के रूप में समझा जाता है।
Comment on ActiveRecord::Base#initialize_dup
from Rails 3:
ठगा वस्तुओं कोई आईडी सौंपा और नए रिकॉर्ड के रूप में इलाज कर रहे हैं है यहाँ विषय के बारे में कुछ उद्धरण हैं। नोट कि यह एक "उथला" प्रतिलिपि है क्योंकि यह ऑब्जेक्ट के गुण को कॉपी करता है, न कि इसके संगठन। "गहरी" प्रतिलिपि की सीमा विशिष्ट है और इसलिए इसकी आवश्यकता के लिए के अनुसार लागू करने के लिए एप्लिकेशन को छोड़ दिया गया है।
An article about deep copies in Ruby:
उल्लेख, clone
लायक एक और तरीका नहीं है। clone
विधि एक महत्वपूर्ण भेद के साथ dup
जैसी ही चीज करता है: यह अपेक्षा की जाती है कि ऑब्जेक्ट इस विधि को ओवरराइड कर देगा जो गहरी प्रतियां कर सकता है।
But then again, theres deep_dup
in Rails 4:
वस्तु की एक गहरी प्रतिलिपि रिटर्न अगर यह duplicable है। यदि यह डुप्लिकेशनल नहीं है, तो self
लौटाता है।
and also ActiveRecord::Core#dup
and #clone
in Rails 4:
clone
- रूबी के क्लोन विधि के समान। यह एक "उथला" प्रति है। चेतावनी दीजिये कि आपके गुणों की प्रतिलिपि नहीं बनाई गई है। [...] अगर आपको अपने गुणों की एक प्रति की आवश्यकता है, तो कृपया #dup
विधि का उपयोग करें।
इसका मतलब है कि यहाँ, शब्द dup
फिर एक गहरी क्लोन करने के लिये किया जाता है। जहां तक मैं देख सकता हूं, समुदाय में कोई आम सहमति नहीं है, सिवाय इसके कि आपको किसी भी व्यक्ति के विशिष्ट दुष्प्रभाव की आवश्यकता होने पर clone
और dup
का उपयोग करना चाहिए।
अंत में, मुझे dup
clone
से रूबी कोड में अधिक बार देखा जाता है। मैंने अब तक clone
का उपयोग कभी नहीं किया है, और जब तक मुझे स्पष्ट रूप से आवश्यकता नहीं है तब तक मैं नहीं करूँगा।
संभावित डुप्लिकेट [रूबी के डुप्लिक और क्लोन विधियों के बीच क्या अंतर है?] (Http://stackoverflow.com/questions/10183370/whats-the-difference-between-rubys-dup-and-clone-methods) – OlehZiniak