Ligação e Desestruturação em Rust

Beginner

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

Introdução

Neste laboratório, o conceito de ligação (binding) em Rust é explorado, permitindo o acesso indireto a variáveis e a capacidade de ramificar e utilizar essa variável sem a necessidade de nova ligação. O símbolo @ na instrução match é usado para vincular valores a nomes. São fornecidos exemplos, incluindo como vincular valores a um intervalo específico e como "desestruturar" variantes de enum, como Option.

Nota: Se o laboratório não especificar um nome de arquivo, você pode usar qualquer nome de arquivo desejado. Por exemplo, você pode usar main.rs, compilar e executar com rustc main.rs && ./main.

Ligação

O acesso indireto a uma variável torna impossível ramificar e usar essa variável sem uma nova ligação. match fornece o símbolo @ para vincular valores a nomes:

// Uma função `age` que retorna um `u32`.
fn age() -> u32 {
    15
}

fn main() {
    println!("Diga-me que tipo de pessoa você é");

    match age() {
        0             => println!("Ainda não celebrei meu primeiro aniversário"),
        // Poderíamos usar `match` 1 ..= 12 diretamente, mas qual seria a idade
        // da criança? Em vez disso, vincule a `n` para a sequência de 1 ..= 12.
        // Agora a idade pode ser relatada.
        n @ 1  ..= 12 => println!("Sou uma criança com {} anos de idade", n),
        n @ 13 ..= 19 => println!("Sou um adolescente com {} anos de idade", n),
        // Nada vinculado. Retorne o resultado.
        n             => println!("Sou uma pessoa mais velha com {} anos de idade", n),
    }
}

Também é possível usar ligação para "desestruturar" variantes de enum, como Option:

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

fn main() {
    match some_number() {
        // Obteve a variante `Some`, verifique se seu valor, vinculado a `n`,
        // é igual a 42.
        Some(n @ 42) => println!("A Resposta: {}!", n),
        // Verifique qualquer outro número.
        Some(n)      => println!("Não é interessante... {}", n),
        // Verifique qualquer outra coisa (variante `None`).
        _            => (),
    }
}

Resumo

Parabéns! Você concluiu o laboratório de Ligação. Você pode praticar mais laboratórios no LabEx para aprimorar suas habilidades.