Pular para o conteúdo

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
Playground
// 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

Índice global

Encontre seu caminho pela Zolo

Experimente uma ideia

Comece por aqui

9 resultados

9 resultados

enespt-br