08 · Tratamento de Erros
Fronteiras locais de Result
attempt executa um bloco e envolve seu resultado normal em Ok. Um ? de Result que falha sai do attempt mais próximo como Err, permitindo continuar no chamador. Um Result no final fica aninhado. Panics não são capturados; propagação de opcionais exige conversão explícita do erro.
Nesta página
attempt executa um bloco e envolve seu resultado normal em Ok. Um ? de Result que falha sai do attempt mais próximo como Err, permitindo continuar no chamador. Um Result no final fica aninhado. Panics não são capturados; propagação de opcionais exige conversão explícita do erro.
Exemplo completo
Fronteiras locais de Result.
11-attempt.zolo
// Feature: local Result boundaries
// Syntax: attempt { let value = fallible()?; value }
// When to use: handle a Result failure locally and continue the caller.
use std::Result
fn read_number(text: str) -> Result<int, str> {
if text == "42" { return Result.Ok(42) }
return Result.Err("bad number")
}
fn main() {
let good: Result<int, str> = attempt {
let value = read_number("42")?
value + 1
}
match good {
Result::Ok(value) => print(value),
Result::Err(error) => print(error),
}
// expected: 43
let bad: Result<int, str> = attempt {
let value = read_number("other")?
value + 1
}
match bad {
Result::Ok(value) => print(value),
Result::Err(error) => print(error),
}
// expected: bad number
print("caller continues")
// expected: caller continues
}
main()
Regras e comportamento
Condições e recuperação de erros · Documentação
A partir de um checkout do repositório:
zolo examples/features/08-error-handling/11-attempt.zolo
Veja também