O que significa o operador de ponto de interrogação (?) em Rust e como ele funciona?
Olá a todos! Comecei a estudar Rust recentemente e me deparei com um operador estranho — o ponto de interrogação (?). Vi ele em código de outras pessoas, mas não consigo entender o que ele faz.
Aqui está um exemplo que encontrei:
```rust
use std::fs::File;
use std::io::Read;
fn read_file(path: &str) -> Result {
let mut file = File::open(path)?; // O que `?` faz aqui?
let mut contents = String::new();
file.read_to_string(&mut contents)?; // E aqui?
Ok(contents)
}
```
Tentei escrever um código parecido sem esse operador, usando `match`, e ficou muito verboso:
```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)
}
```
Então, `?` substitui um bloco inteiro de
No answers yet.
Faça login para deixar uma resposta