रस्ट 1.0 के लिए अपडेट किया गया
आप अपने कार्यक्रम के पूरे जीवन के लिए नहीं रह सकते हैं, और यह जीवन भर का मतलब है क्योंकि आप &'static strसे प्राप्त नहीं कर सकते हैं । आप केवल एक स्लाइस मानदंड प्राप्त कर सकते हैं जो स्वयं का जीवनकाल है।StringString&'staticString
ए से जाना है Stringएक स्लाइस लिए &'a strआप स्लाइसिंग सिंटैक्स का उपयोग कर सकते हैं:
let s: String = "abcdefg".to_owned();
let s_slice: &str = &s[..];
वैकल्पिक रूप से, आप इस तथ्य का उपयोग कर सकते हैं कि Stringलागू होता है Deref<Target=str>और एक स्पष्ट रीबोरिंग करता है:
let s_slice: &str = &*s;
एक और तरीका है जो और भी अधिक संक्षिप्त वाक्य रचना के लिए अनुमति देता है लेकिन इसका उपयोग केवल तभी किया जा सकता है जब कंपाइलर वांछित लक्ष्य प्रकार (जैसे फ़ंक्शन तर्क या स्पष्ट रूप से टाइप किए गए चर बाइंडिंग) निर्धारित करने में सक्षम हो। यह कहा जाता है deref coercion और यह बस &ऑपरेटर का उपयोग करने की अनुमति देता है , और संकलक स्वचालित रूप *से संदर्भ के आधार पर उपयुक्त मात्रा में सम्मिलित करेगा :
let s_slice: &str = &s;
fn take_name(name: &str) { ... }
take_name(&s);
let not_correct = &s;
ध्यान दें कि यह पैटर्न के लिए अद्वितीय नहीं है String/ &str- आप जिसके माध्यम से जुड़े हुए हैं प्रकार की प्रत्येक जोड़ी के साथ उपयोग कर सकते हैं Deref, उदाहरण के लिए, के साथ CString/ CStrऔर OsString/ OsStrसे std::ffiमॉड्यूल या PathBuf/ Pathसे std::pathमॉड्यूल।
'staticजीवनकाल का अर्थ यह होगा कि स्ट्रिंग को कभी नहीं हटाया जाएगा, अर्थात मेमोरी रिसाव। आपको कुछ उपयुक्त के&'static strबदले की आवश्यकता क्यों है ?&'a str'a