Reaccionar según el tipo de error en Rust
Hacer match sobre la variante del error para que cada falla tenga su propia recuperación.
use std::num::IntErrorKind;
fn classify(text: &str) -> &'static str {
match text.parse::<u8>() {
Ok(_) => "fits in a byte",
Err(e) => match e.kind() {
IntErrorKind::Empty => "empty input",
IntErrorKind::InvalidDigit => "not a number",
IntErrorKind::PosOverflow => "too large",
_ => "unusable",
},
}
}
fn main() {
for text in ["7", "", "abc", "9000"] {
println!("{text:?}: {}", classify(text));
}
println!("{}", matches!("5".parse::<u8>(), Ok(n) if n > 3));
}
Cómo funciona
kind()en un error de IO nombra la categoría.- El match deja que una rama reintente y otra se rinda.
matches!es la forma breve cuando solo necesitas un bool.
Palabras clave y builtins usados aquí
ErrOkfnforifinmatchstaticstru8use
El intento, en números
- Líneas
- 20
- Caracteres a escribir
- 460
- Tokens
- 165
- Ritmo de tres estrellas
- 105 tpm
Al ritmo de tres estrellas de 105 tokens por minuto, este intento toma unos 94 segundos.
Paso 2 de 2 en Panics y recuperación; paso 14 de 15 en Manejo de errores.