2016-01-05 12 views
5

जूलिया के दस्तावेज़ से:जूलिया तर्क गुजर व्यवहार

जूलिया समारोह तर्क एक सम्मेलन कभी-कभी "पास-से-शेयरिंग" कहा जाता है का पालन करें ...

  1. इसका मतलब यह है कि एक बदल रहा है फ़ंक्शन के अंदर म्यूटेबल ऑब्जेक्ट्स ऑब्जेक्ट को कॉलर स्कोप में भी बदल देगा?

  2. लेकिन यदि ऑब्जेक्ट अपरिवर्तनीय है तो फ़ंक्शन के अंदर इसे बदलना कॉलर स्कोप में ऑब्जेक्ट को प्रभावित नहीं करेगा? क्या इस मामले में मूल्य से गुजरने से कोई अलग है?

  3. क्या मैं सही हूं कि समारोह के अंत में ! जोड़ना सिर्फ एक सम्मेलन है, लेकिन संकलन में इसका कोई अर्थपूर्ण अर्थ नहीं है?

  4. उपयोगकर्ता द्वारा परिभाषित समग्र प्रकार के उत्परिवर्तनीय वस्तु के मूल्य को पारित करने का सबसे अच्छा तरीका क्या होगा? मैंने copy() का उपयोग करने का प्रयास किया, लेकिन यह त्रुटि मिली कि copy() मेरे कस्टम प्रकार के लिए परिभाषित नहीं है। मुझे लगता है कि मुझे अपने कस्टम प्रकार के लिए copy() का विस्तार करने की आवश्यकता है। जहां मैं अन्य प्रकार के लिए copy() की परिभाषाएं पा सकता हूं (विस्तार को लिखते समय उन्हें संदर्भ के रूप में उपयोग करना चाहते हैं)?

उत्तर

2
  1. इसका मतलब यह है कि समारोह के अंदर एक परिवर्तनशील वस्तुओं को बदलने के भी फोन करने वाले दायरे में वस्तु बदल जाएगा?

संक्षिप्त उत्तर हाँ है। लेकिन यह रखें: "ऑब्जेक्ट बदलना" एक व्यापक अवधारणा है, क्या यह एक नया स्मृति स्थान असाइन किया गया है? यदि आप फ़ंक्शन स्कोप में स्थानीय चर को पुन: आवंटित करते हैं, तो निश्चित रूप से कॉलर के साथ साझाकरण स्ट्रिंग काटा जाएगा। ->read more about mutation and assignment

  1. लेकिन यदि ऑब्जेक्ट अपरिवर्तनीय है तो फ़ंक्शन के अंदर इसे बदलना कॉलर स्कोप में ऑब्जेक्ट को प्रभावित नहीं करेगा? क्या इस मामले में मूल्य से गुजरने से कोई अलग है?

ऐसा इसलिए है क्योंकि एक अपरिवर्तनीय उत्परिवर्तनीय नहीं है, इसलिए इसे बदलने का एकमात्र तरीका एक नया मेमोरी स्थान असाइन करना है, और इस तरह साझाकरण स्ट्रिंग काटा जाएगा।

  1. क्या मैं सही जोड़ रहा हूं! समारोह के अंत में सिर्फ एक सम्मेलन है, लेकिन संकलन में कोई अर्थपूर्ण अर्थ नहीं है?

हाँ आप सही हैं।

  1. क्या ....?

इसके बजाय deepcopy() का उपयोग करें।

संबंधित मुद्दे