में पर्याप्त लंबे समय तक नहीं रहती है मुझे घोंसला वाले लैम्ब्डा के अंदर एक त्रुटि मिल रही है।परिवर्तनीय के साथ उधार-जांच त्रुटि नेस्टेड लैम्ब्डा
let rows = vec![
vec![3, 6, 2, 8, 9, 0],
vec![0, 0, 1, 4, 5, 1],
];
let pair_sums = rows.iter()
.flat_map(|row| {
(0..row.len() - 1).map(|i| row[i] + row[i + 1])
})
.collect::<Vec<_>>();
println!("{:?}", pair_sums);
error[E0597]: `row` does not live long enough
--> src/main.rs:9:40
|
9 | (0..row.len() - 1).map(|i| row[i] + row[i + 1])
| --- ^^^ does not live long enough
| |
| capture occurs here
10 | })
| - borrowed value only lives until here
11 | .collect::<Vec<_>>();
| - borrowed value needs to live until here
मैं इन सबसे छुटकारा देख सकते हैं क्यों यह हो रहा है, और मैं भीतरी लैम्ब्डा करने के लिए के माध्यम से row
का मूल्य सूत्रण करके इसे ठीक कर सकते हैं:
let pair_sums = rows.iter()
.flat_map(|row| {
(0..row.len() - 1).zip(vec![row; row.len()])
.map(|(i, row)| row[i] + row[i + 1])
})
.collect::<Vec<_>>();
यह भयानक है और यह कर सकते हैं ' टी सबसे अच्छा समाधान नहीं है। मैं स्पष्ट रूप से उन्हें पास किए बिना माता-पिता के दायरे में चर का संदर्भ कैसे दे सकता हूं?
धन्यवाद। मैंने कुछ महीनों के बाद इस जवाब को फिर से पढ़ा। वह हिस्सा जो स्पष्ट नहीं था आलसी नक्शा इटेटरेटर है। कनेक्टिंग-बाय-रेफरेंस के साथ कनेक्ट करने से यह सब समझ में आता है। –