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
Box<dyn Error>borra el tipo concreto del error.?encaja en el Box cualquier cosa que implementeError.- Sacrifica el match por variantes a cambio de no declararlas.
Palabras clave y builtins usados aquí
BoxErrOkResultdynfnfori32inletmatchstruse
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.
Paso 4 de 5 en Tus propios tipos de error; paso 11 de 15 en Manejo de errores.