Avatar ·

Wie man die Iteration stoppt und einen Fehler zurückgibt, wenn Iterator::map Result::Err zurückgibt

Hallo erfahrene Rastler! Ich bin neu in Rust und kämpfe seit einigen Stunden mit einem Problem. Ich habe einen Vektor von Strings, die ich mit `Iterator::map` und `str::parse::()` in Zahlen umwandeln möchte. Das Problem ist, dass `parse` ein `Result` zurückgibt, und wenn auch nur ein String keine Zahl ist, möchte ich die gesamte Iteration sofort stoppen und einen Fehler an den aufrufenden Code zurückgeben. Hier ist mein Code: ```rust fn parse_numbers(input: Vec<&str>) -> Vec { input.iter().map(|s| s.parse::().unwrap()).collect() } ``` `unwrap()` panikt, aber ich brauche eine elegante Lösung ohne Panik. Ich habe `filter_map` ausprobiert, aber es ignoriert einfach Fehler, während ich sie weiterleiten muss. Ich habe auch versucht, alles in ein `Result` zu packen: ```rust fn parse_numbers(input: Vec<&str>) -> Result, ParseIntError> { input.iter().map(|s| s.parse::()).collect() } ``` Aber das funktioniert nicht, weil `collect` nicht weiß, wie es `Vec>` in `Result, _>` sammeln soll. Der Compiler meckert.

Noch keine Antworten.

Anmelden um eine Antwort zu hinterlassen

Blogs