रस्ट 1.0 के लिए अपडेट किया गया
आप अपने कार्यक्रम के पूरे जीवन के लिए नहीं रह सकते हैं, और यह जीवन भर का मतलब है क्योंकि आप &'static str
से प्राप्त नहीं कर सकते हैं । आप केवल एक स्लाइस मानदंड प्राप्त कर सकते हैं जो स्वयं का जीवनकाल है।String
String
&'static
String
ए से जाना है 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