La liaison et la déstructuration en Rust

RustRustBeginner
Pratiquer maintenant

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

💡 Ce tutoriel est traduit par l'IA à partir de la version anglaise. Pour voir la version originale, vous pouvez cliquer ici

Introduction

Dans ce laboratoire, le concept de liaison en Rust est exploré, qui permet d'accéder indirectement aux variables et d'avoir la possibilité de créer des branches et d'utiliser cette variable sans la relier. Le sigle @ dans l'énoncé match est utilisé pour lier des valeurs à des noms. Des exemples sont fournis, notamment sur la manière de lier des valeurs à une plage spécifique et sur la manière de "déstructurer" des variantes enum telles que Option.

Note : Si le laboratoire ne spécifie pas de nom de fichier, vous pouvez utiliser n'importe quel nom de fichier que vous voulez. Par exemple, vous pouvez utiliser main.rs, le compiler et l'exécuter avec rustc main.rs &&./main.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/AdvancedTopicsGroup -.-> rust/operator_overloading("Traits for Operator Overloading") subgraph Lab Skills rust/integer_types -.-> lab-99316{{"La liaison et la déstructuration en Rust"}} rust/string_type -.-> lab-99316{{"La liaison et la déstructuration en Rust"}} rust/function_syntax -.-> lab-99316{{"La liaison et la déstructuration en Rust"}} rust/expressions_statements -.-> lab-99316{{"La liaison et la déstructuration en Rust"}} rust/lifetime_specifiers -.-> lab-99316{{"La liaison et la déstructuration en Rust"}} rust/operator_overloading -.-> lab-99316{{"La liaison et la déstructuration en Rust"}} end

Binding

Accéder indirectement à une variable rend impossible de créer des branches et d'utiliser cette variable sans la relier. match fournit le sigle @ pour lier des valeurs à des noms :

// Une fonction `age` qui renvoie un `u32`.
fn age() -> u32 {
    15
}

fn main() {
    println!("Dites-moi quel type de personne vous êtes");

    match age() {
        0             => println!("Je n'ai pas encore fêté mon premier anniversaire"),
        // On pourrait directement `match` 1..= 12, mais alors quel âge
        // aurait l'enfant? Au lieu de cela, liez à `n` pour la
        // séquence de 1..= 12. Maintenant, l'âge peut être rapporté.
        n @ 1 ..= 12 => println!("Je suis un enfant de {:?} ans", n),
        n @ 13..= 19 => println!("Je suis un ado de {:?} ans", n),
        // Rien n'est lié. Retournez le résultat.
        n             => println!("Je suis une personne âgée de {:?} ans", n),
    }
}

Vous pouvez également utiliser la liaison pour "déstructurer" des variantes enum, telles que Option :

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

fn main() {
    match some_number() {
        // On a obtenu la variante `Some`, vérifiez si sa valeur, liée à `n`,
        // est égale à 42.
        Some(n @ 42) => println!("La réponse : {}!", n),
        // Vérifiez tout autre nombre.
        Some(n)      => println!("Pas intéressant... {}", n),
        // Vérifiez tout autre chose (`None` variant).
        _            => (),
    }
}

Résumé

Félicitations! Vous avez terminé le laboratoire sur la liaison. Vous pouvez pratiquer d'autres laboratoires sur LabEx pour améliorer vos compétences.