Avatar ·

O que o operador de interrogação (?) faz em Rust e como ele funciona com erros?

Olá a todos! Sou novo em Rust e estou tentando entender o tratamento de erros. Frequentemente vejo em código alheio um operador de interrogação estranho — `?`. Por exemplo, 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) } ``` Eu entendo que `File::open` retorna um `Result`, mas o que esse `?` faz no final da linha? Sem ele, o compilador reclama que não estou tratando o `Result`. Mas se eu adicionar `?`, o código funciona. Tentei ler a documentação, mas está complicada. Vocês podem explicar em palavras simples: o que é esse sinal de interrogação mágico? Ele está relacionado com `unwrap()` ou `match`? Por que a função retorna `Result`, mas no corpo eu posso usar `?` e não escrever match para cada chamada? Exemplo que me confunde: se eu substituir `?` por `.unwrap()`, o código também funciona, mas em caso de erro o programa quebra.