बदलता है मेरे पास मानों की एक सरणी है जिसे मैं हैश मानों को प्रिंट करते समय ऑर्डर के संदर्भ के रूप में उपयोग करता हूं। मैं सरणी को संशोधित करना चाहता हूं ताकि सरणी मान "सुंदर" हो। मैंने सोचा कि मैं सिर्फ सरणी को डुप्लिकेट या क्लोन कर दूंगा, मानों को बदल दूंगा और मूल वस्तु अनचाहे रहेगी। हालांकि (आईआरबी में) ...दोनों डुप्लिकेट और क्लोन अलग-अलग ऑब्जेक्ट्स लौटाते हैं, लेकिन उन्हें संशोधित करने से मूल ऑब्जेक्ट
@arr = ['stuff', 'things']
a = @arr.clone
b = @arr.dup
तो, कम से कम, एक और @arr विभिन्न वस्तुओं रहे हैं:
a.object_id == @arr.object_id
=> false
लेकिन अब यह अजीब
a[0].capitalize!
a
=> ['Stuff', 'things']
@arr
=> ['Stuff', 'things'] ##<-what?
b
=> ['Stuff', 'things']## <-what???
ठीक हो जाता है ... तो एक को संशोधित करना दूसरों को बदलता है, इसे वापस बदल देता है?
a[0] = 'stuff'
a
=> ['stuff', 'things']
@arr
=> ['Stuff', 'things'] ## <- WHAT?????
पूर्णता बी [1] के लिए .capitalize! एक ही प्रभाव है, सभी तीन सरणी की दूसरी स्थिति
तो ... क्या पूंजीकरण के अंत में बैंग इसे अतिरिक्त शक्तिशाली बनाता है? अन्य वस्तुओं पर पार करने के लिए पर्याप्त ?? मुझे ऐसा करने के अन्य तरीकों के बारे में पता है, लेकिन यह मेरे लिए बेहद अजीब लग रहा था। मुझे लगता है कि यह "उथली प्रतिलिपि" होने के साथ कुछ करने के लिए है। ऐसा करने के सर्वोत्तम तरीके पर सुझाव?
आह देखें ... मैं देख रहा हूँ। मैं यह भी देखता हूं कि मुझे जो चाहिए वह जानना एक "गहरी प्रति" थी, मेरी खोज में काफी मदद मिली होगी :- धन्यवाद! – jearl