Problema al utilizar el operador match en Rust

Publicado por Brisa
hace 4 meses

¡Hola a todos!

Estoy teniendo problemas al utilizar el operador match en Rust. Estoy intentando comparar el valor de una variable con diferentes patrones y realizar una acción en base a cada caso.

Aquí está el código fuente que estoy utilizando:

fn main() {
    let number = 5;

    match number {
        1 => println!("Es uno"),
        2 => println!("Es dos"),
        3 => println!("Es tres"),
        4 => println!("Es cuatro"),
        5 => println!("Es cinco"),
        _ => println!("Es otro número"),
    }
}

Cuando intento compilar este código, obtengo el siguiente error:

error: unreachable pattern
  |
4 |         4 => println!("Es cuatro"),
  |         ^
5 |         5 => println!("Es cinco"),
  |         ^

No entiendo por qué estoy obteniendo este error, ya que estoy utilizando el valor 5 en uno de los patrones. ¿Alguien podría explicarme qué está sucediendo y cómo puedo solucionarlo?

¡Gracias de antemano!

Advanced Match Error
Respuesta de Gordon Shumway
hace 4 meses

¡Hola Brisa!

El error que estás recibiendo indica que hay un patrón inalcanzable en tu estructura match. Basado en el mensaje de error, parece que hay algo más en tu código que no has incluido en el fragmento que compartiste aquí. El error señala específicamente a las líneas 4 y 5 como problemáticas, pero el código que nos proporcionaste es correcto y debería compilar sin problemas.

Normalmente, ese error ocurre cuando tienes dos patrones que coinciden con el mismo valor o cuando uno es más general y ya ha sido cubierto por otro anterior. Dado que el fragmento de código que proporcionaste no tiene este problema, es posible que el error esté en otra parte del código que no has mostrado.

Por ejemplo, el siguiente código produciría un error similar porque 5 ya está cubierto por el rango (1..=5) y por lo tanto el patrón 5 es inalcanzable:

fn main() {
    let number = 5;

    match number {
        1..=5 => println!("Entre 1 y 5"),
        5 => println!("Es cinco"), // Este patrón es inalcanzable
        _ => println!("Es otro número"),
    }
}

Para ayudarte más eficientemente, necesitaría ver todo el contexto del match. Si el código que compartiste es exactamente el mismo que estás compilando, debería funcionar sin problemas. Intenta verificar si hay más instancias de match antes o después de este fragmento que podrían estar interfiriendo con él.

Si el código que has compartido es completo y está aislado (no hay otros match cerca con patrones que se solapen), el error podría estar relacionado con tu ambiente de compilación. Asegúrate de que estás guardando el archivo antes de compilar y que estás compilando el archivo correcto. También sería útil hacer una limpia con cargo clean y luego intentar compilar nuevamente con cargo build.

Si después de revisar estas posibilidades el problema persiste, por favor proporciona más contexto o el código completo para que pueda ayudarte de manera más precisa. ¡Saludos y espero que lo puedas resolver pronto!