से संग्रह भरते समय मिस्चैच "बाउंड आजीवन पैरामीटर" बनाम "ठोस जीवनकाल" टाइप करें, मैं एक पुनरावृत्ति अनुक्रम में दोहराव खोजने की कोशिश कर रहा हूं। इसके अलावा, मैं उस बिंदु पर उस अनुक्रम में हुए तत्वों को जानना चाहता हूं।बंद करें
मैंने HashMap
बनाया और take_while
द्वारा उपयोग किए गए बंद होने के भीतर insert
पर कॉल करने का प्रयास कर रहा हूं। हालांकि, मैंने अब तक कंक्रीट/बाध्य जीवनकाल से संबंधित प्रकार के विसंगतियों के कारण संकलन करने में कामयाब नहीं रहा है।
use std::collections::HashSet;
fn main() {
let mut seq = HashSet::new();
let mut insert = |k| seq.insert(k);
(1..10).cycle().take_while(insert);
}
यहाँ त्रुटियों मैं कर रहे हैं::
error[E0631]: type mismatch in closure arguments
--> src/main.rs:6:21
|
5 | let mut insert = |k| seq.insert(k);
| ----------------- found signature of `fn(_) -> _`
6 | (1..10).cycle().take_while(insert);
| ^^^^^^^^^^ expected signature of `for<'r> fn(&'r {integer}) -> _`
error[E0271]: type mismatch resolving `for<'r> <[[email protected]/main.rs:5:22: 5:39 seq:_] as std::ops::FnOnce<(&'r {integer},)>>::Output == bool`
--> src/main.rs:6:21
|
6 | (1..10).cycle().take_while(insert);
| ^^^^^^^^^^ expected bound lifetime parameter, found concrete lifetime
मैं कैसे करने के लिए इसके लिए कोड को बदलने की जरूरत है
यहाँ जो एक ही त्रुटि दर्शाती है मेरी कोड का एक सरलीकृत संस्करण है काम?
उत्सुक है, यह अगर बंद 'take_while' कॉल में सीधे ले जाया जाता है काम करता है: http://is.gd/OgVK2i –
@ker, यह काम करता है, क्योंकि आप एक बड़ी चालाकी से अलग बात कर रहे हैं - आप पैटर्न में एक अंतर्निहित dereference का उपयोग कर रहे हैं, जो मूल कोड नहीं है। –