Avatar ·

Que fait l'opérateur question (?) en Rust et comment fonctionne-t-il avec les erreurs ?

Bonjour à tous ! Je suis nouveau en Rust et j'essaie de comprendre la gestion des erreurs. Souvent, dans le code des autres, je vois un étrange opérateur question — `?`. Par exemple, ce code : ```rust use std::fs::File; use std::io::Read; fn read_file(path: &str) -> Result { let mut file = File::open(path)?; let mut content = String::new(); file.read_to_string(&mut content)?; Ok(content) } ``` Je comprends que `File::open` retourne un `Result`, mais que fait ce `?` à la fin de la ligne ? Sans lui, le compilateur se plaint que je ne gère pas le `Result`. Mais si j'ajoute `?`, le code fonctionne. J'ai essayé de lire la documentation, mais c'est écrit de manière compliquée. Pouvez-vous expliquer en termes simples : qu'est-ce que ce signe magique ? Est-il lié à `unwrap()` ou `match` ? Pourquoi la fonction retourne un `Result`, mais dans le corps je peux utiliser `?` sans écrire un match pour chaque appel ? Exemple qui me trouble : si je remplace `?` par `.unwrap()`, le code fonctionne aussi, mais en cas d'erreur le programme plante.