Avatar ·

¿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.