Découpage de structs Rust avec correspondance de motifs

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, vous allez apprendre à déstructurer des structs en Rust, ce qui vous permet d'extraire les champs individuels et leurs valeurs d'un struct en utilisant la correspondance de motifs.

Note : Si le nom de fichier n'est pas spécifié dans le laboratoire, 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/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") 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") subgraph Lab Skills rust/variable_declarations -.-> lab-99314{{"Découpage de structs Rust avec correspondance de motifs"}} rust/integer_types -.-> lab-99314{{"Découpage de structs Rust avec correspondance de motifs"}} rust/string_type -.-> lab-99314{{"Découpage de structs Rust avec correspondance de motifs"}} rust/function_syntax -.-> lab-99314{{"Découpage de structs Rust avec correspondance de motifs"}} rust/expressions_statements -.-> lab-99314{{"Découpage de structs Rust avec correspondance de motifs"}} rust/lifetime_specifiers -.-> lab-99314{{"Découpage de structs Rust avec correspondance de motifs"}} end

structs

De même, un struct peut être déstructuré comme suit :

fn main() {
    struct Foo {
        x: (u32, u32),
        y: u32,
    }

    // Essayez de modifier les valeurs dans le struct pour voir ce qui se passe
    let foo = Foo { x: (1, 2), y: 3 };

    match foo {
        Foo { x: (1, b), y } => println!("Le premier de x est 1, b = {},  y = {} ", b, y),

        // vous pouvez déstructurer des structs et renommer les variables,
        // l'ordre n'est pas important
        Foo { y: 2, x: i } => println!("y est 2, i = {:?}", i),

        // et vous pouvez également ignorer certaines variables :
        Foo { y,.. } => println!("y = {}, on n'a pas besoin de x", y),
        // cela générera une erreur : le motif ne mentionne pas le champ `x`
        //Foo { y } => println!("y = {}", y),
    }

    let faa = Foo { x: (1, 2), y: 3 };

    // Vous n'avez pas besoin d'un bloc match pour déstructurer des structs :
    let Foo { x : x0, y: y0 } = faa;
    println!("En dehors : x0 = {x0:?}, y0 = {y0}");
}

Résumé

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