Avatar ·

Comment arrêter l'itération et retourner une erreur lorsque Iterator::map retourne Result::Err ?

Bonjour, experts Rustaciens ! Je suis débutant en Rust et je lutte sur un problème depuis plusieurs heures. J'ai un vecteur de chaînes que je veux convertir en nombres en utilisant `Iterator::map` et `str::parse::()`. Le problème est que `parse` retourne un `Result`, et si une seule chaîne n'est pas un nombre, je veux immédiatement arrêter toute l'itération et retourner l'erreur au code appelant. Voici mon code : ```rust fn parse_numbers(input: Vec<&str>) -> Vec { input.iter().map(|s| s.parse::().unwrap()).collect() } ``` `unwrap()` panique, mais j'ai besoin d'une solution élégante sans panique. J'ai essayé d'utiliser `filter_map`, mais il ignore simplement les erreurs, alors que j'ai besoin de les propager. J'ai aussi essayé d'envelopper le tout dans un `Result` : ```rust fn parse_numbers(input: Vec<&str>) -> Result, ParseIntError> { input.iter().map(|s| s.parse::()).collect() } ``` Mais cela ne fonctionne pas, car `collect` ne sait pas comment collecter un `Vec>` en un `Result, _>`. Le compilateur râle.