रुबी में चर कब निर्धारित करता है कि नया संदर्भ रखना है या नहीं? - माणिक

मैंने सीखा कि रुबी में, चर वस्तुओं को संदर्भित करते हैं, ऑब्जेक्ट्स स्वयं नहीं। उदाहरण के लिए:

a = "Tim"
b = a
a[0] = "J"

फिर तथा दोनों के पास मूल्य "जिम" है।

हालांकि अगर मैं तीसरी पंक्ति को बदलता हूं

a = "Jim"

फिर एक == जिम तथा बी == टिम

मुझे लगता है कि इसका मतलब है कि मैंने जो कोड बदल दिया है, उसके लिए एक नया संदर्भ बनाया गया है

तो क्यों एक पत्र बदलना या पूरी स्ट्रिंग को बदलना इतना अंतर बनाता है?

अनुवर्ती सवाल: क्या जावा एक ही तरीके से काम करता है?

धन्यवाद।

उत्तर:

उत्तर № 1 के लिए 4

यहां सीखने की एक बात यह है कि बीच अंतर है असाइनमेंट तथा विधि कॉल

a = "Jim"

एक असाइनमेंट है आप एक नई स्ट्रिंग ऑब्जेक्ट बनाते हैं (शाब्दिक "Jim") और इसे चर के लिए असाइन करें a

दूसरी तरफ,

a[0] = "J"

एक है विधि कॉल एक ऑब्जेक्ट पर पहले से ही चर द्वारा संदर्भित a। एक विधि कॉल वैरिएबल द्वारा संदर्भित ऑब्जेक्ट को किसी अन्य के साथ प्रतिस्थापित नहीं कर सकता है, यह केवल ऑब्जेक्ट की आंतरिक स्थिति को बदल सकता है, और / या किसी अन्य ऑब्जेक्ट को वापस कर सकता है।


जवाब के लिए 3 № 2

मुझे लगता है कि इस तरह की चीजें आईआरबी का उपयोग करने के लिए सबसे आसान हैं:

>> a = "Tim"
=> "Tim"
>> a.object_id
=> 2156046480
>> b = a
=> "Tim"
>> b.object_id
=> 2156046480
>> a.object_id == b.object_id
=> true

जैसा कि आप देख सकते हैं a तथा b समान प्रकार का हो object_id, जिसका अर्थ है कि वे एक ही वस्तु का संदर्भ देते हैं। तो जब आप एक बदलते हैं, तो आप दूसरे को बदल देते हैं। अब कुछ नया असाइन करें a:

>> a = "Jim"
=> "Jim"
>> a.object_id
=> 2156019520
>> b.object_id
=> 2156046480
>> a.object_id == b.object_id
=> false

तुमने बनाया a जबकि एक नई वस्तु को इंगित करें b अभी भी पुराना संदर्भ रखा है। उनमें से किसी को बदलना अब दूसरे को नहीं बदलेगा।


उत्तर № 3 के लिए 1

जब तुम करोगे a[0] = "J", आप पूछ रहे हैं

संदर्भित ऑब्जेक्ट का पहला अक्षर बदलें a (जो जैसा ही होता है b) "जे"

जबकि आप करते हैं a = "Jim", आप "एक पूरी तरह से नया ऑब्जेक्ट संदर्भ (स्ट्रिंग "Jim") सेवा मेरे ab अप्रभावित है क्योंकि आप मूल संदर्भ में कुछ भी नहीं बदल रहे हैं।


संबंधित सवाल
सबसे लोकप्रिय