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.