Ich versuche geschachtelte Iteratoren zu verwenden, wobei der innere Iterator Werte aus dem äußeren Iterator verwendet. Warum verschachtelte Iterator-Closures keine Werte aus dem äußeren Gültigkeitsbereich kopieren
vec![0;10].iter().flat_map(|&a| {
(0..10).map(|b|{
a + b
})
});
error:
a
does not live long enough(0..10).map(|b|{ ^^^
note: reference must be valid for the method call...
Dies kompiliert, wenn ich den inneren Verschluss (move |b|{
) bewegen, aber ich verstehe nicht, warum es notwendig ist, da a
eine ganze Zahl ist und statt verschoben kopiert worden sein könnte.
https://doc.rust-lang.org/book/closures.html#closures-and-their-environment In kurzen Verschlüsse borgt seine Umgebung standardmäßig. Mit 'move' übernehmen Sie die Verantwortung für die Umwelt. Wenn der Wert kopierbar ist, kann er nicht verschoben werden und wird kopiert. – aSpex