Que signifie l'opérateur point d'interrogation (?) en Rust et comment fonctionne-t-il ?
Bonjour à tous ! J'ai commencé à apprendre Rust récemment et je suis tombé sur un opérateur étrange — le point d'interrogation (?). Je l'ai vu dans le code de quelqu'un d'autre, mais je ne comprends pas ce qu'il fait.
Voici un exemple que j'ai trouvé :
```rust
use std::fs::File;
use std::io::Read;
fn read_file(path: &str) -> Result {
let mut file = File::open(path)?; // Que fait `?` ici ?
let mut contents = String::new();
file.read_to_string(&mut contents)?; // Et ici ?
Ok(contents)
}
```
J'ai essayé d'écrire un code similaire sans cet opérateur, en utilisant `match`, et cela est devenu très lourd :
```rust
fn read_file_verbose(path: &str) -> Result {
let mut file = match File::open(path) {
Ok(f) => f,
Err(e) => return Err(e),
};
let mut contents = String::new();
match file.read_to_string(&mut contents) {
Ok(_) => {},
Err(e) => return Err(e),
};
Ok(contents)
}
```
Il s'avère que `?` remplace tout un bloc de code.