Ich versuche, eine Reihe von Json
Objekte mit potenziellen Fehlern zu analysieren, die die gesamte Funktion abbrechen.Schöne Möglichkeit, mit potenziellen Fehler zu mappen
Idealerweise würde ich so etwas wie:
fn .... -> Result<Vec<Video>, YoutubeParseError> {
...
let videos = try!(doc.find("items").
and_then(Json::as_array).
ok_or(YoutubeParseError));
Ok(videos.into_iter().
map(|item| try!(json_to_video(item))).
collect())
}
Aber natürlich nicht versuchen, die map()
auf Fehler entkommt und statt Result<Vec<Video>,_>
, bekomme ich Vec<Result<Video,_>>
. Ich könnte dies als manuelle Iteration umschreiben, indem ich Elemente in ein neues Vec einfüge, aber ich habe das Gefühl, dass mir eine einfachere Art des Umgangs damit fehlt.
Gibt es eine bestehende Funktion, die mich leicht von Iter<Result<T>>
zu Result<Vec<T>,_>
bringen würde?
Ich glaube nicht, dass zweiter Versuch! funktioniert wie du willst. Versuchen! wird dich aus der Schließung bringen. By the way haben Sie sich 'flat_map' angeschaut – sgldiv