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

रूबी में Dup vs Clone: ऑब्जेक्ट कॉपी करने की तकनीकों में महारत हासिल करें

क्या आप जानते हैं कि आप रूबी में ऑब्जेक्ट कॉपी कर सकते हैं? न केवल यह, बल्कि ऐसा करने के लिए दो अलग-अलग मेथड्स हैं!

ये मेथड्स हैं:

  • 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 vs Clone: ऑब्जेक्ट कॉपी करने की तकनीकों में महारत हासिल करें

फ्रोज़न ऑब्जेक्ट्स

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 मेथड्स के बीच अंतर, और शैलो कॉपी बनाम डीप कॉपी शामिल हैं।

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

  1. रूबी के साथ इंसर्शन सॉर्ट में महारत: एक चरण-दर-चरण गाइड रूबी के साथ इंसर्शन सॉर्ट में महारत: एक चरण-दर-चरण गाइड

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

  1. Ruby आउटपुट मूल बातें: puts, print, और p के बीच चयन Ruby आउटपुट मूल बातें: puts, print, और p के बीच चयन

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

  1. रूबी ऑब्जेक्ट्स को डेकोरेटर पैटर्न से बढ़ाएं: एक व्यावहारिक गाइड रूबी ऑब्जेक्ट्स को डेकोरेटर पैटर्न से बढ़ाएं: एक व्यावहारिक गाइड

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