Saltar al contenido

08 · Manejo de Errores

Límites locales de Result

attempt ejecuta un bloque y envuelve su resultado normal en Ok. Un ? de Result que falla sale del attempt más cercano como Err. Un Result al final permanece anidado. No captura panics; la propagación de opcionales requiere conversión explícita del error.

En esta página

attempt ejecuta un bloque y envuelve su resultado normal en Ok. Un ? de Result que falla sale del attempt más cercano como Err. Un Result al final permanece anidado. No captura panics; la propagación de opcionales requiere conversión explícita del error.

Ejemplo completo

Límites locales 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()

Reglas y comportamiento

Condiciones y recuperación de errores · Documentación

Desde un checkout del repositorio:

zolo examples/features/08-error-handling/11-attempt.zolo

Índice global

Encuentra tu camino por Zolo

Prueba una idea

Empieza aquí

9 resultados

9 resultados

enespt-br