Moim celem jest pobranie iteratora dla wszystkich elementów w macierzy obok numeru wiersza powiązanego z każdym elementem.Dożywotnie problem z odwzorowaniem iteratora na elementy macierzy
Poniżej znajduje się uproszczona wersja całego problemu, na który napotykam.
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);
}
}
Oto błąd Dostaję:
<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))
^~~~~~~~~~~~~~~~~~
Oto playpen link.
Problem wydaje się wynikać z niemożności wywnioskowania czasu życia w argumencie zamknięcia metody mapy, chociaż nie jestem pewien dlaczego.
- Czy ktoś może wyjaśnić sprawę tutaj nieco jaśniej?
- Czy jest możliwe utworzenie żądanego iteratora w inny sposób?