Mein Ziel ist es, einen Iterator über alle Elemente in einer Matrix neben der mit jedem Element verknüpften Zeilennummer abzurufen.Lebensdauerproblem beim Zuordnen eines Iterators über Elemente einer Matrix
Das folgende ist eine vereinfachte Version des Lebenszeitproblems, in das ich renne.
fn main() {
let mat = [ [1i32, 2, 3],
[4, 5, 6],
[7, 8, 9] ];
// Create an iterator that produces each element alongside its row number.
let all_elems = mat.iter().enumerate().flat_map(|(row, arr)| {
arr.iter().map(|elem| (row, elem)) // Error occurs here.
});
for (row, elem) in all_elems {
println!("Row: {}, Elem: {}", row, elem);
}
}
Hier ist der Fehler Ich erhalte:
<anon>:10:9: 10:43 error: cannot infer an appropriate lifetime for lifetime parameter 'r in function call due to conflicting requirements
<anon>:10 arr.iter().map(|elem| (row, elem))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<anon>:10:24: 10:42 note: first, the lifetime cannot outlive the expression at 10:23...
<anon>:10 arr.iter().map(|elem| (row, elem))
^~~~~~~~~~~~~~~~~~
<anon>:10:24: 10:42 note: ...so type `|&i32| -> (uint, &i32)` of expression is valid during the expression
<anon>:10 arr.iter().map(|elem| (row, elem))
^~~~~~~~~~~~~~~~~~
<anon>:10:9: 10:43 note: but, the lifetime must be valid for the method call at 10:8...
<anon>:10 arr.iter().map(|elem| (row, elem))
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
<anon>:10:24: 10:42 note: ...so that argument is valid for the call
<anon>:10 arr.iter().map(|elem| (row, elem))
^~~~~~~~~~~~~~~~~~
Hier ist die playpen link.
Das Problem scheint von einer Unfähigkeit zu stammen, die Lebenszeit im Abschluss-Argument der Kartenmethode abzuleiten, obwohl ich mir nicht sicher bin warum.
- Kann jemand das Problem hier ein wenig deutlicher erklären?
- Ist es möglich, den gewünschten Iterator auf andere Weise zu erzeugen?