Wie stoppe ich die Iteration und gebe einen Fehler zurück, wenn Iterator :: map ein Ergebnis :: Err zurückgibt?
Ich habe eine Funktion, die ein @ zurückgiResult
:
fn find(id: &Id) -> Result<Item, ItemError> {
// ...
}
Dann eine andere Verwendung davon wie folgt:
let parent_items: Vec<Item> = parent_ids.iter()
.map(|id| find(id).unwrap())
.collect();
Wie gehe ich mit dem Fehlerfall in einem dermap
Iterationen?
Ich weiß, ich könnte @ verwendflat_map
und in diesem Fall wären die Fehlerergebnisse ignoriert:
let parent_items: Vec<Item> = parent_ids.iter()
.flat_map(|id| find(id).into_iter())
.collect();
Result
e nach Erfolgsstatus hat der Iterator von @ entweder 0 oder 1 Elemente, undflat_map
filtert es heraus, wenn es 0 ist.
Allerdings möchte ich nichtignoriereei @ -Fehlern möchte ich stattdessen dafür sorgen, dass der gesamte Codeblock angehalten wird und ein neuer Fehler zurückgegeben wird (basierend auf dem Fehler, der in der Karte aufgetreten ist, oder einfach den vorhandenen Fehler weitergeleitet wird).
Wie gehe ich in Rust am besten damit um?