Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> Ruby

रूबी में डुप बनाम क्लोन:अंतर को समझना

क्या आप जानते हैं कि आप रूबी में किसी वस्तु की प्रतिलिपि बना सकते हैं? इतना ही नहीं, ऐसा करने के दो अलग-अलग तरीके हैं!

ये विधियां हैं :

  • dup
  • clone

हम एक पल में मतभेदों का पता लगाएंगे, लेकिन पहले…

आप किसी वस्तु का क्लोन क्यों बनाना चाहते हैं ?

रूबी में कई वस्तुएं परिवर्तनशील हैं, आप उन्हें बदल सकते हैं।

अगर आप किसी वस्तु को बदलना चाहते हैं लेकिन मूल की एक प्रति अपने पास रखें तब आप उसका क्लोन बना सकते हैं।

उदाहरण के लिए।

आप सभी तत्वों के साथ एक सरणी चाहते हैं लेकिन पहले वाला।

ऐसा करने का एक तरीका :

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 ऑब्जेक्ट विशेषताओं की प्रतिलिपि नहीं बनाता है।

कौन सी वस्तु विशेषताएँ?

  • जमे हुए स्थिति
  • दागी स्थिति
  • एकल वर्ग

यहां एक उदाहरण दिया गया है :

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 विधि आज़मा सकते हैं।

सारांश

आपने रूबी में वस्तुओं की क्लोनिंग के बारे में सीखा है! जिसमें डुप्ली और क्लोन विधियों और उथली कॉपी बनाम डीप कॉपी के बीच अंतर शामिल हैं।

पढ़ने के लिए धन्यवाद!


  1. रूबी में इंसर्शन सॉर्ट को समझना

    नोट:रूबी के साथ विभिन्न सॉर्टिंग एल्गोरिदम को लागू करने पर विचार करने वाली श्रृंखला में यह भाग 4 है। भाग 1 ने बबल सॉर्ट की खोज की, भाग 2 ने चयन प्रकार की खोज की, और भाग 3 ने मर्ज सॉर्ट की खोज की। जैसा कि हम डेटा सॉर्ट करने के लिए विभिन्न तरीकों का पता लगाना जारी रखते हैं, हम इंसर्शन सॉर्ट की ओर रु

  1. पुट, प्रिंट और पी . के बीच अंतर को समझना

    रूबी में कुछ प्रिंट करने के कई तरीके हैं। यहां सबसे उपयोगी हैं : डालता है प्रिंट करें पी लेकिन ये अलग कैसे हैं? और आपको एक या दूसरे का उपयोग कब करना चाहिए ? इस लेख में आप यही सीखने जा रहे हैं! नई लाइन के बिना प्रिंट कैसे करें जब आप उपयोगकर्ता को देखने के लिए स्क्रीन पर कुछ प्रिंट करना चाहते ह

  1. रूबी में डेकोरेटर डिजाइन पैटर्न

    डेकोरेटर डिजाइन पैटर्न क्या है? और आप अपने रूबी प्रोजेक्ट्स में इस पैटर्न का उपयोग कैसे कर सकते हैं? डेकोरेटर डिज़ाइन पैटर्न नई क्षमताओं . जोड़कर किसी ऑब्जेक्ट को बेहतर बनाने में आपकी सहायता करता है इसमें बिना कक्षा बदले। आइए एक उदाहरण देखें! लॉगिंग और प्रदर्शन इस उदाहरण में हम रेस्ट-क्लाइंट जैस