क्या आप जानते हैं कि आप रूबी में ऑब्जेक्ट कॉपी कर सकते हैं? न केवल यह, बल्कि ऐसा करने के लिए दो अलग-अलग मेथड्स हैं!
ये मेथड्स हैं:
dupclone
हम एक पल में अंतर का पता लगाएंगे, लेकिन पहले...
आप ऑब्जेक्ट को क्लोन क्यों करना चाहेंगे?
रूबी में कई ऑब्जेक्ट्स म्यूटेबल हैं, आप उन्हें बदल सकते हैं।
यदि आप ऑब्जेक्ट को बदलना चाहते हैं लेकिन मूल की एक कॉपी रखना चाहते हैं तो आप इसे क्लोन कर सकते हैं।
उदाहरण के लिए।
आप पहले को छोड़कर सभी तत्वों के साथ एक ऐरे चाहते हैं।
इसे करने का एक तरीका:
a = [1,2,3,4,5] a[1..-1] # [2,3,4,5]
दूसरा तरीका होगा:
b = a.clone b.shift # [1] b # [2,3,4,5]
दोनों उदाहरण आपको मूल ऐरे को बनाए रखने की अनुमति देते हैं।

फ्रोज़न ऑब्जेक्ट्स
Dup और clone एक दूसरे के उपनाम नहीं हैं जैसे कि अन्य रूबी मेथड्स (map/collect) के साथ होता है, उनके बीच कुछ छोटे अंतर हैं।
समानता और अंतर दो चीजों के बीच का पता लगाना आपकी समझ को बेहतर बनाने का एक शानदार तरीका है।
दोनों मेथड्स ऑब्जेक्ट की कॉपी करते हैं, अंतर यह है कि dup ऑब्जेक्ट एट्रिब्यूट्स को कॉपी नहीं करता।
कौन से ऑब्जेक्ट एट्रिब्यूट्स?
- फ्रोज़न स्टेटस
- टेंटेड स्टेटस
- सिंगलटन क्लास
यहाँ एक उदाहरण है:
a = Object.new.freeze b = a.dup b.frozen? # false b = a.clone b.frozen? # true
रूबी 2.4 में clone के लिए फ्रोज़न स्टेटस को नजरअंदाज करने का विकल्प शामिल है।
उदाहरण:
a.clone(freeze: true) a.clone(freeze: false)
डीप बनाम शैलो कॉपीइंग
ऑब्जेक्ट कॉपी करने में दिखने वाली बात से अधिक है।
जब आप कॉपी बनाते हैं, चाहे dup या clone के साथ, आप शैलो कॉपी बना रहे हैं।
इसका मतलब है कि अन्य ऑब्जेक्ट्स के अंदर मौजूद ऑब्जेक्ट्स कॉपी नहीं होंगे।
दूसरे शब्दों में:
यदि आपके पास स्ट्रिंग्स की ऐरे है, तो केवल ऐरे कॉपी होगी, स्ट्रिंग्स स्वयं नहीं।
स्वयं देखें:
original = %w(apple orange banana) copy = original.clone original.map(&:object_id) # [23506500, 23506488, 23506476] copy.map(&:object_id) # [23506500, 23506488, 23506476]
ऑब्जेक्ट आईडी क्लोनिंग ऐरे के बाद भी समान हैं, इसलिए हमारे पास वही स्ट्रिंग्स हैं।
आप इसे इसके साथ हल कर सकते हैं:
strings.clone.map(&:clone)
इसके परिणामस्वरूप ऐरे और स्ट्रिंग्स दोनों क्लोन हो जाते हैं, लेकिन ध्यान दें कि यह केवल एक लेवल डीप जाता है। आप ActiveSupport से deep_dup मेथड को विकल्प के रूप में आज़मा सकते हैं।
सारांश
आपने रूबी में ऑब्जेक्ट्स क्लोन करने के बारे में सीखा! जिसमें dup और clone मेथड्स के बीच अंतर, और शैलो कॉपी बनाम डीप कॉपी शामिल हैं।
पढ़ने के लिए धन्यवाद!