2014-09-09 6 views
30

स्ट्रिंग सदस्यों के साथ संरचना कैसे बनाएं? सदस्यों को संरचना वस्तु के स्वामित्व में होना चाहिए। मैं जंग के लिए नया हूं, सरल प्रश्न के लिए खेद है, लेकिन मुझे एक उदाहरण नहीं मिला। "~" का उपयोग करके कुछ पुराना उदाहरण था जिसे लगता है कि हटा दिया गया है ... मैं संरचना की सही घोषणा और फिर तत्काल उदाहरण की तलाश में हूं।जंग: स्ट्रिंग सदस्यों के साथ संरचना कैसे बनाएं?

+0

'स्ट्रिंग' का प्रयोग करें और ध्यान रखें कि '.to_string()' के माध्यम से 'और str' से' स्ट्रिंग' बनाना 'एक ढेर आवंटन + संपूर्ण स्ट्रिंग को कॉपी करना शामिल है। – sellibitze

उत्तर

59

यदि स्ट्रिंग को संरचना के स्वामित्व में होना है, तो आपको String का उपयोग करना चाहिए। वैकल्पिक रूप से, आप एक स्थिर जीवनकाल (यानी, कार्यक्रम का जीवनकाल) के साथ &str का उपयोग कर सकते हैं। उदाहरण के लिए:

struct Foo { 
    bar: String, 
    baz: &'static str, 
} 

fn main() { 
    let foo = Foo { 
     bar: "bar".to_string(), 
     baz: "baz", 
    }; 
    println!("{}, {}", foo.bar, foo.baz); 
} 

स्ट्रिंग के जीवनकाल अज्ञात है, तो आप Foo एक जीवन भर के साथ parameterize कर सकते हैं:

struct Foo<'a> { 
    baz: &'a str, 
} 

और अगर आप सुनिश्चित नहीं हैं कि क्या स्ट्रिंग या स्वामित्व नहीं की जाएगी (आवंटन से बचने के लिए उपयोगी), तो आप borrow::Cow उपयोग कर सकते हैं:

use std::borrow::Cow; 

struct Foo<'a> { 
    baz: Cow<'a, str>, 
} 

fn main() { 
    let foo1 = Foo { baz: Cow::Borrowed("baz") }; 
    let foo2 = Foo { baz: Cow::Owned("baz".to_string()) }; 
    println!("{}, {}", foo1.baz, foo2.baz); 
} 

ध्यान दें कि Cow प्रकार पैरामिट्रीकृत ov है जीवन भर में जीवनकाल के जीवनकाल को संदर्भित करता है स्ट्रिंग उधार (यानी, जब यह Borrowed है)। यदि आपके पास Cow है, तो आप borrow का उपयोग कर सकते हैं और &'a str प्राप्त कर सकते हैं, जिसके साथ आप एक नई स्ट्रिंग आवंटित करने के बारे में चिंता किए बिना सामान्य स्ट्रिंग ऑपरेशन कर सकते हैं या नहीं। (आमतौर पर, borrow की स्पष्ट बुला deref की वजह से की आवश्यकता नहीं है। अर्थात्, Cow मूल्यों उनके उधार फार्म के लिए स्वचालित रूप से deref होगा। तो &*valval टाइप Cow<'a, str> एक &str का उत्पादन करेगा है जहां।)

~ वाक्य रचना वास्तव में अब मान्य नहीं है । ~str के लिए प्रतिस्थापन String है, जिसे आप स्ट्रिंग बफर के रूप में सोच सकते हैं (यानी, स्ट्रिंग की सामग्री संशोधित है और यह बढ़ने योग्य है)। एक &str एक स्ट्रिंग के अपरिवर्तनीय दृश्य है जिसे सुरक्षित कोड में बदला नहीं जा सकता है।

+3

उहह, पूर्ण उत्तर के लिए धन्यवाद। मुझे जीवन भर parametrization के बारे में सोचने की जरूरत है :) – vladimir

संबंधित मुद्दे