typestar

Box<dyn Error> en Rust

Un trait object en un Box acepta cualquier error; sirve para código de aplicación y mains.

use std::error::Error;

fn parse_pair(text: &str) -> Result<(i32, i32), Box<dyn Error>> {
    let (a, b) = text.split_once(',').ok_or("expected a comma")?;
    Ok((a.trim().parse()?, b.trim().parse()?))
}

fn main() {
    println!("{:?}", parse_pair("3, 4"));
    for bad in ["3 4", "3, x"] {
        match parse_pair(bad) {
            Ok(pair) => println!("{:?}", pair),
            Err(e) => println!("{bad:?} -> {e}"),
        }
    }
}

Cómo funciona

  1. Box<dyn Error> borra el tipo concreto del error.
  2. ? encaja en el Box cualquier cosa que implemente Error.
  3. Sacrifica el match por variantes a cambio de no declararlas.

Palabras clave y builtins usados aquí

El intento, en números

Líneas
16
Caracteres a escribir
380
Tokens
149
Ritmo de tres estrellas
105 tpm

Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 85 segundos.

Escribe este fragmento

Paso 4 de 5 en Tus propios tipos de error; paso 11 de 15 en Manejo de errores.

← Anterior Siguiente →