Rust में 'let x = x' क्या करता है?


117

मैंने इस कोड को जंगली में देखा :

fields.sort_by_key(|&(_, ref field)| field.tags().into_iter().min().unwrap());
let fields = fields;

let fields = fields;रेखा क्या करती है? ऐसा क्यों है?

जवाबों:


144

यह fieldsफिर से अपरिवर्तनीय बनाता है ।

fieldsपहले उत्परिवर्तनीय ( let mut fields = …;) के रूप में परिभाषित किया गया था , जिसका उपयोग sort_by_keyइन-प्लेस के साथ किया जाता है और लक्ष्य को परिवर्तनशील होने की आवश्यकता होती है। लेखक ने स्पष्ट रूप से आगे उत्परिवर्तन को रोकने के लिए यहां चुना है।

"डाउनग्रेड" अपरिवर्तनीय के लिए एक उत्परिवर्ती बंधन रस्ट में काफी आम है।

ऐसा करने का एक और सामान्य तरीका ब्लॉक एक्सप्रेशन का उपयोग करना है:

let fields = {
    let mut fields =;
    fields.sort_by_key();
    fields
};

44
या "अपग्रेड", आपके नजरिए पर निर्भर करता है।
3

8
IMO आपके लिखने का एक और तरीका है जो जाने का तरीका है: उत्परिवर्तनीय चर को उस समय को बंद कर दिया जाता है जब हमें इसका उपयोग करने की आवश्यकता होती है, और फिर इसे स्थानांतरित कर दिया जाता है। यह शब्दार्थ से बेहतर है।
बोइथियोस

@DarthBoiethios संकलित कोड में कुछ परिवर्तन करता है या नहीं? एक अतिरिक्त, बेकार निर्देश जोड़ने की तरह? या अपरिवर्तनीय मान्यताओं के आधार पर संकलक द्वारा अधिक आक्रामक अनुकूलन सक्षम करना?
Iago-lito '

1
@ इगो-लिटो ईमानदारी से, मुझे यकीन नहीं है, लेकिन मेरा अशिक्षित अनुमान यह है कि कुछ भी नहीं बदलता है।
बोइथियोस

1
@ इगो-लिटो अभी यह वास्तव में करता है! हालांकि यह एक बग माना जाता है और कुछ बिंदु पर तय होने की संभावना है।
mcarton

19

बयान अपरिवर्तनीय let var = var;बनाता है varऔर इसके वर्तमान मूल्य के लिए बाध्य है। पहले fieldsजैसा घोषित किया गया mutथा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.