पहचान भले ही रस्ट अपनी रस्ट पुस्तक प्रदान करता है, फिर भी मुझे कीवर्ड को समझने में कठिनाई हुई। मैंने खुद से पूछा, "क्या मैं अकेला हूं जिसे यह समस्या है?" एक त्वरित Google खोज ने पुष्टि की कि मैं अकेला नहीं था। mut परिणामस्वरूप, मैंने कीवर्ड का विस्तृत विवरण प्रदान करने के लिए यह लेख लिखने का निर्णय लिया। यह लेख उन लोगों के लिए है जो उच्च-स्तरीय भाषाओं जैसे कि पायथन या जावास्क्रिप्ट से आते हैं। mut चर रस्ट में एक अपरिवर्तनीय वैरिएबल बनाने के लिए, बस लिखें। यह सीधा है. यदि आप एक ऐसा वैरिएबल बनाना चाहते हैं जिसे बाद में बदला जा सके, तो बस के बाद कीवर्ड जोड़ें। रस्ट में एक सहायक परंपरा है जो इरादों की स्पष्टता को प्रोत्साहित करती है। let x = 1337 let mut कीवर्ड जोड़ने से दूसरों को सूचित होता है कि यह वेरिएबल कोड में कहीं और संशोधित किया जाएगा। ठीक है। mut आइए इसकी कल्पना करें। यहां दो चर हैं, और । let mut x = 1337 let y = 42 सन्दर्भ फिलहाल, सब कुछ सीधा है. हालाँकि, संदर्भों का उपयोग करते समय चीजें थोड़ी घुंघराले होने लगती हैं। आइए कुछ बनाएं. mut let mut x = 1337; let y = 42; let x_ref = &mut x; let y_ref = &y; मैंने दो संदर्भ बनाए (या जंग के संदर्भ में "उधार लिया")। उनमें से एक परिवर्तनशील संदर्भ है, और दूसरा केवल पढ़ने योग्य संदर्भ है। आइए उसके लिए फिर से एक योजना बनाएं। दी गई योजना में, मेरे पास 4 चर हैं, जिनमें से 2 संदर्भ हैं। दोनों संदर्भ चर अपरिवर्तनीय हैं और उनमें के बाद कीवर्ड नहीं है, जिसका अर्थ है कि वे जो इंगित करते हैं उसे मैं बदल नहीं सकता। हालाँकि, मैं अभी भी उनके द्वारा संदर्भित मूल्य को बदल सकता हूँ। let mut *x_ref = 777; यदि आप इसे लिखते हैं, तो रस्ट कंपाइलर शिकायत नहीं करेगा, और का मान (रेफरी स्वयं नहीं) में बदल जाएगा। हालाँकि, योजना पर एक लाल वर्ग है जो दर्शाता है कि में परिवर्तनशीलता विकल्प का अभाव है। तो, मैं इसके द्वारा संदर्भित मूल्य को क्यों बदल सकता हूँ? x 777 x_ref चलिए की योजना पर वापस आते हैं। let x_ref = &mut x पहले सफ़ेद ब्लॉक में नाम है: . दूसरा मुझे उस वेरिएबल में संग्रहीत प्रकार के बारे में सूचित करता है। इसके पूर्ण रूप में, बिना किसी अंतर्निहित प्रकार की टिप्पणियों के, मैं इस प्रकार लिख सकता हूं: x_ref let x_ref: &mut i32 = &mut x; मैं इसकी व्याख्या इस प्रकार कर सकता हूं: आइए नामक एक बनाएं जो के लिए एक रखेगा और इसे चर में मान के के साथ तुरंत आरंभ करेगा। x_ref अपरिवर्तनीय चर i32 परिवर्तनशील संदर्भ x i32 परिवर्तनीय संदर्भ इसका मतलब यह है कि मैं उस मान को संशोधित कर सकता हूं जो यह इंगित करता है, लेकिन मैं संदर्भ के मान (या पते) को नहीं बदल सकता। दूसरे शब्दों में, मैं ऐसा कुछ नहीं लिख सकता: let x_ref: &mut i32 = &mut x; let mut z = 0; x_ref = &mut z; // Not allowed! योजनाओं के संदर्भ में, मैं ऊपर दिए गए कोड ब्लॉक में तीर जिस दिशा की ओर इशारा कर रहा है उसे बदलना चाहता हूं। हालाँकि, भले ही वेरिएबल परिवर्तनशील हो, मैं तीर नहीं बदल सकता क्योंकि समस्या की अपरिवर्तनीयता में ही निहित है। z x_ref तीर की दिशा बदलने के लिए, मुझे वेरिएबल में संग्रहीत पते को संशोधित करना होगा। हालाँकि, मैं ऐसा नहीं कर सकता क्योंकि चर अपरिवर्तनीय है। x_ref चलो यह करते हैं! let mut x: i32 = 1337; let mut x_ref: &mut i32 = &mut x; // I've added mut before x_ref let mut z = 0; x_ref = &mut z; // Allowed! यहाँ के आसपास के बहुत सारे उदाहरण हैं, है ना? आइए उनका वर्णन करें. x_ref mut : मैं नामक एक परिवर्तनीय चर बना रहा हूं, जिसका अर्थ है कि मैं बाद में इसका मान बदल सकता हूं। let mut x_ref x_ref : मैं बता रहा हूं कि वेरिएबल में प्रकार के कुछ मानों के लिए परिवर्तनीय संदर्भ शामिल होंगे। &mut i32 i32 : मैं वेरिएबल उधार ले रहा हूं (संदर्भ प्राप्त कर रहा हूं)। &mut x x फिर, मैंने नामक एक वेरिएबल बनाया और इसे का मान दिया। बाद में, जब मैंने लिखा, तो मैंने संकेत दिया कि मैं को एक परिवर्तनशील चर समझता हूं जो केवल मानों के संदर्भ रख सकता है। z 0 x_ref = &mut z x_ref i32 चूँकि का प्रकार है, मैं इसका पता वेरिएबल को निर्दिष्ट करने में सक्षम हूँ। का पता प्राप्त करने के लिए, मैंने सिंटैक्स का उपयोग किया। z i32 x_ref z &mut z यह योजना। मानसिक युक्ति कथन में पर एक नज़र डालें, यह थोड़ा स्पष्ट लग सकता है, लेकिन... = let mut x_ref = &mut x; ... मैं इसे एक विभाजक के रूप में देखता हूं (खासकर यदि आप इसे 90 डिग्री तक घुमाते हैं) जो कथन को दो उप-कथनों में विभाजित करता है: बाएँ और दाएँ। बाईं ओर जानकारी प्रदान करता है, जबकि दाईं ओर हमें बताता है। वेरिएबल के बारे में मूल्य के बारे में जब मैं मान बदलने के लिए डेरेफ़रेंस ऑपरेटर का उपयोग करता हूं... * *x_ref = 100; ... मैं वेरिएबल का मान नहीं बदलता। इसके बजाय, मैं उस मान को बदल रहा हूं जिसे संदर्भित कर रहा है। x_ref x_ref अपरिवर्तनीय सन्दर्भ मैं पहले अक्सर उपयोग करता था। यदि मैं उनमें से कुछ को छोड़ दूं तो क्या होगा? mut let i = 1; let j = 2; let mut k = &i; क्या मैं यहाँ का मान बदल सकता हूँ? विभाजक तकनीक का उपयोग करके, इसका उत्तर देना काफी सरल है। मैं का मान बदल सकता हूँ (मुझे बाईं ओर दिखाई देता है), लेकिन मान (दाईं ओर) का एक अपरिवर्तनीय संदर्भ है (यहाँ कोई नहीं है)। i k mut i mut इसलिए… let i = 1; let j = 2; let mut k = &i; k = &j; // This is legal. *k = 3; // This is not. यह योजना। निष्कर्ष इस लेख में, हमने कीवर्ड और संदर्भों की बारीकियों का विश्लेषण किया है। याद रखें, और संदर्भ रखने वाले के बीच अंतर होता है। हमारी चाल? mut परिवर्तनशील संदर्भ परिवर्तनशील चर रस्ट में असाइनमेंट को बेहतर ढंग से समझने के लिए मानसिक विभाजक के रूप में चिह्न का उपयोग करना। यह सरल दृश्य कई भ्रमों को दूर कर सकता है। = हैप्पी कोडिंग!