¿Qué hace el operador de interrogación (?) en Rust y cómo funciona con errores?
¡Hola a todos! Soy nuevo en Rust y estoy tratando de entender el manejo de errores. A menudo en código ajeno veo un extraño operador de interrogación — `?`. Por ejemplo, este código:
```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)
}
```
Entiendo que `File::open` devuelve un `Result`, pero ¿qué hace ese `?` al final de la línea? Sin él, el compilador se queja de que no estoy manejando el `Result`. Pero si agrego `?`, el código funciona.
He intentado leer la documentación, pero está escrita de manera complicada. ¿Pueden explicar en palabras simples: qué es este signo de interrogación mágico? ¿Está relacionado con `unwrap()` o `match`? ¿Por qué la función devuelve `Result`, pero en el cuerpo puedo usar `?` y no escribir match para cada llamada?
Ejemplo que me confunde: si reemplazo `?` por `.unwrap()`, el código también funciona, pero en caso de error el programa se cae.
No answers yet.
Inicia sesión para dejar una respuesta
Blogs