Avatar ·

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