Enlace y Desestructuración en Rust

Beginner

This tutorial is from open-source community. Access the source code

Introducción

En este laboratorio, se explora el concepto de enlace en Rust, que permite acceder indirectamente a variables y la capacidad de bifurcar y utilizar esa variable sin volver a enlazarla. El símbolo @ en la declaración match se utiliza para enlazar valores a nombres. Se proporcionan ejemplos, incluyendo cómo enlazar valores a un rango específico y cómo "desestructurar" variantes de enum como Option.

Nota: Si el laboratorio no especifica un nombre de archivo, puede usar cualquier nombre de archivo que desee. Por ejemplo, puede usar main.rs, compilar y ejecutarlo con rustc main.rs &&./main.

Enlace

Acceder indirectamente a una variable hace imposible bifurcar y utilizar esa variable sin volver a enlazarla. match proporciona el símbolo @ para enlazar valores a nombres:

// Una función `age` que devuelve un `u32`.
fn age() -> u32 {
    15
}

fn main() {
    println!("Dime de qué tipo de persona eres");

    match age() {
        0             => println!("Todavía no he celebrado mi primer cumpleaños"),
        // Podría `match` 1..= 12 directamente, pero entonces, ¿qué edad
        // tendría el niño? En cambio, enlaza a `n` para la
        // secuencia de 1..= 12. Ahora se puede informar la edad.
        n @ 1 ..= 12 => println!("Soy un niño de {:?} años", n),
        n @ 13..= 19 => println!("Soy un adolescente de {:?} años", n),
        // No se enlaza nada. Devuelve el resultado.
        n             => println!("Soy una persona mayor de {:?} años", n),
    }
}

También se puede usar el enlace para "desestructurar" variantes de enum, como Option:

fn some_number() -> Option<u32> {
    Some(42)
}

fn main() {
    match some_number() {
        // Obtuvo la variante `Some`, coincide si su valor, enlazado a `n`,
        // es igual a 42.
        Some(n @ 42) => println!("La respuesta: {}!", n),
        // Coincide con cualquier otro número.
        Some(n)      => println!("No es interesante... {}", n),
        // Coincide con cualquier otra cosa (`None` variante).
        _            => (),
    }
}

Resumen

¡Felicitaciones! Has completado el laboratorio de Enlace. Puedes practicar más laboratorios en LabEx para mejorar tus habilidades.