let mut result = String::with_capacity(1000);
result.push_str("things... ");
result.push_str("stuff... ");
result.truncate((result.len() - 4));
हालांकि, यह एक संकलित त्रुटि है। उधार चेकर और संभवतः उत्परिवर्तन के साथ कुछ करना है।अपरिवर्तनीय के रूप में उधार नहीं ले सकता है - स्ट्रिंग और लेन()
let newlen = result.len() - 4;
result.truncate(newlen);
क्यों:
error[E0502]: cannot borrow `result` as immutable because it is also borrowed as mutable
--> <anon>:7:22
|
7 | result.truncate((result.len() - 4));
| ------ ^^^^^^ - mutable borrow ends here
| | |
| | immutable borrow occurs here
| mutable borrow occurs here
फिर भी, अगर मैं इसे थोड़ा परिवर्तन मैं ऐसा करने की अनुमति है? क्या इसे बदलने का कोई तरीका है ताकि इसे एक पंक्ति में लिखा जा सके? (पीएस यह जंग 1.0 पर है)
इससे स्पष्ट करने में मदद मिलती है। यह किसी भी चीज़ से परेशान है। तो त्रुटि 'ट्रंकेट' की आवश्यकता के बीच एक संघर्ष से संबंधित है और 'लैन' अपरिवर्तनीयता की आवश्यकता है? ऐसा लगता है कि 'result.len()' का काम खत्म हो जाने से पहले पूरा हो जाएगा, जिसका अर्थ यह है कि यह किसी भी चीज से कंपाइलर क्विर्क से अधिक है? http://doc.rust-lang.org/std/string/struct.String.html#method.len – jocull
आप लगभग सही हैं - समस्या यह है कि 'ट्रंकेट' के लिए 'और mut self' की आवश्यकता होती है जो * किसी भी * बाद में प्रतिबंधित होती है एक ही दायरे में उधार लेना। और हां, यह * लगता है कि 'result.len() 'को' truncate() 'को सौंपने से पहले पूरा हो गया है, हालांकि, मेरा जवाब बताता है कि ऐसा क्यों नहीं है - असल में, विधि रिसीवर की गणना की जाती है * पहले * तर्क, और इसलिए 'result.len()' द्वारा अपेक्षित * 'और परिणाम 'से पहले * और mut result' गुंजाइश में है। –
@jocull, यदि आप इसमें रूचि रखते हैं तो आप मेरे अपडेट में जिन मुद्दों से जुड़े हैं, उनमें अधिक जानकारी मिल सकती है। –