मैं एक मल्टीक्टर से 2-आयामी मैट्रिक्स बनाने की कोशिश कर रहा हूं जो प्रत्येक तत्व बनाता है, और इसे एक फ्लैट वेक (प्रत्येक पंक्ति को संयोजित) के रूप में संग्रहीत करता है।नेस्टेड मानचित्र में बंद करने का उपयोग कैसे करें?
मैंने प्रत्येक पंक्ति बनाने और इसे संयोजित करने के लिए नेस्टेड मानचित्र (वास्तव में एक flat_map और एक नेस्टेड मानचित्र) का उपयोग किया। Here is what I tried:
fn make<T,F>(n: usize, m: usize, f: F) -> Vec<T>
where F: Fn(usize,usize) -> T
{
(0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
}
fn main() {
let v = make(5,5, |x,y| x+y);
println!("{:?}", v);
}
दुर्भाग्य से, मैं संकलन के दौरान कोई त्रुटि मिलती है (सामान्य 'काफी देर तक नहीं रहते')। नेस्टेड मानचित्रों में बंद करने का उपयोग कैसे किया जाता है?
<anon>:4:36: 4:46 error: `y` does not live long enough
<anon>:4 (0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
^~~~~~~~~~
<anon>:4:5: 4:58 note: reference must be valid for the method call at 4:4...
<anon>:4 (0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<anon>:4:25: 4:47 note: ...but borrowed value is only valid for the scope of parameters for function at 4:24
<anon>:4 (0..m).flat_map(|y| (0..n).map(|x| f(x,y))).collect()
^~~~~~~~~~~~~~~~~~~~~~
(मैं इस मुद्दे by using a single map on 0..n*m के आसपास काम किया, लेकिन मैं अभी भी जवाब में दिलचस्पी रखता हूँ।)
शायद http://stackoverflow.com/q/28521637/155423 का डुप्लिकेट? – Shepmaster
मुझे आशा है कि y: usize कॉपी-सक्षम था, इसे आंतरिक बंद करके मूल्य से लिया जा सकता है, इस प्रकार किसी उधार लेने की आवश्यकता से परहेज किया जा सकता है ... – Gyscos
मैं सहमत हूं, और मुझे आश्चर्य है कि यहां एक त्रुटि है सब - मुझे लगता है कि इसे 'FnMut' के साथ करना है। एक वास्तविक बग भी हो सकता है, क्योंकि सभी चरों पर '.clone()' छिड़कने से समस्या ठीक नहीं होती है क्योंकि मैंने सोचा था कि यह भी होगा। – Shepmaster