बनाने के लिए मैं इटरेटर विशेषता का उपयोग कैसे करूं, मुझे पेड़ के लिए जंगल नहीं दिखाई दे रहा है, लेकिन मुझे आश्चर्य है कि मैं वास्तव में हार्ड कलेक्शन प्रकारों के खिलाफ काम करने के लिए अपने तरीकों को कैसे डिजाइन करूं लेकिन इसके बजाय इटरेटर के खिलाफ कैसे काम करूं। इस विधि पर विचार करें।जेनेरिक एपीआई
pub fn print_strings(strings: Vec<String>) {
for val in strings.iter() {
println!("{}", val);
}
}
जाहिर है इस छोटे से गिर जाता है अगर मैं उपयोग करने के लिए है कि एक HashSet
या HashMap
साथ चाहते हैं।
use std::collections::*;
fn main() {
let strings = vec!("Foo", "Bar");
let mut more_strings = HashMap::new();
more_strings.insert("foo", "bar");
more_strings.insert("bar", "foo");
print_strings(&strings.iter());
print_strings(&more_strings.values())
}
fn print_strings(strings: &Iterator<Item=&str>) {
for val in strings {
println!("{}", val);
}
}
Playpen (भी लंबा संकलक त्रुटि देखने पर)
दुर्भाग्य से, यह या तो चाल करने के लिए प्रतीत नहीं होता:
तो, मैं इस कोशिश की। मैं क्या खो रहा हूँ?
कृपया त्रुटि संदेश शामिल करें। यह आपको बताता है कि आपके कार्यान्वयन में क्या गलत है।आप समीक्षा कर सकते हैं कि आपके पास इटरेटर के लिए 'इटरेटर :: आइटम' किस प्रकार का है। – Shepmaster
मुझे नहीं लगता कि यह एक अच्छा विचार है क्योंकि यह काफी लंबा है। आप पूरे कंपाइलर त्रुटि आउटपुट को देखने के लिए प्लेपेन लिंक पर क्लिक कर सकते हैं। – Christoph
जब आप 'Vec 'पर' .iter() 'को कॉल करते हैं, तो आपको' Iterator - 'मिलता है। इसलिए जब आप 'Vec <&str> 'पर' .iter() 'को कॉल करते हैं, तो आपको' Iterator
- 'मिलता है, न कि' Iterator
- '। आपको 'Iterator' के लिए' .cloned() 'विधि को देखना चाहिए, इससे आपकी समस्या का समाधान करने में मदद मिलनी चाहिए। –
Adrian