typestar

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

  1. kind() en un error de IO nombra la categoría.
  2. El match deja que una rama reintente y otra se rinda.
  3. matches! es la forma breve cuando solo necesitas un bool.

Palabras clave y builtins usados aquí

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.

Escribe este fragmento

Paso 2 de 2 en Panics y recuperación; paso 14 de 15 en Manejo de errores.

← Anterior Siguiente →