Binding und Destrukturierung in Rust

RustRustBeginner
Jetzt üben

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

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab wird das Konzept der Bindung in Rust untersucht, das es ermöglicht, indirekten Zugang zu Variablen zu erhalten und die Möglichkeit zu verzweigen und diese Variable zu verwenden, ohne sie erneut zu binden. Das @-Zeichen im match-Statement wird verwendet, um Werte an Namen zu binden. Es werden Beispiele gegeben, darunter wie Werte an einen bestimmten Bereich gebunden werden und wie enum-Varianten wie Option "zerlegt" werden können.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/AdvancedTopicsGroup(["Advanced Topics"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) 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{{"Binding und Destrukturierung in Rust"}} rust/string_type -.-> lab-99316{{"Binding und Destrukturierung in Rust"}} rust/function_syntax -.-> lab-99316{{"Binding und Destrukturierung in Rust"}} rust/expressions_statements -.-> lab-99316{{"Binding und Destrukturierung in Rust"}} rust/lifetime_specifiers -.-> lab-99316{{"Binding und Destrukturierung in Rust"}} rust/operator_overloading -.-> lab-99316{{"Binding und Destrukturierung in Rust"}} end

Bindung

Indirekter Zugang zu einer Variable macht es unmöglich, diese Variable zu verzweigen und zu verwenden, ohne sie erneut zu binden. match bietet das @-Zeichen zum Binden von Werten an Namen:

// Eine Funktion `age`, die eine `u32` zurückgibt.
fn age() -> u32 {
    15
}

fn main() {
    println!("Sag mir, was für eine Art Person du bist");

    match age() {
        0             => println!("Ich habe noch keinen Geburtstag gefeiert"),
        // Könnte direkt `match` 1..= 12 verwenden, aber dann wäre das Alter
        // der Kindes noch unklar. Stattdessen binden wir an `n` für die
        // Sequenz 1..= 12. Jetzt kann das Alter gemeldet werden.
        n @ 1 ..= 12 => println!("Ich bin ein Kind im Alter von {:?}", n),
        n @ 13..= 19 => println!("Ich bin ein Teenager im Alter von {:?}", n),
        // Kein Binding. Gib das Ergebnis zurück.
        n             => println!("Ich bin ein alter Mensch im Alter von {:?}", n),
    }
}

Man kann auch Binding verwenden, um enum-Varianten wie Option "zerzulegen":

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

fn main() {
    match some_number() {
        // Es wurde die `Some`-Variante erhalten. Prüfe, ob ihr Wert,
        // der an `n` gebunden ist, gleich 42 ist.
        Some(n @ 42) => println!("Die Antwort: {}!", n),
        // Prüfe auf jede andere Zahl.
        Some(n)      => println!("Nicht interessant... {}", n),
        // Prüfe auf alles andere (`None`-Variante).
        _            => (),
    }
}

Zusammenfassung

Herzlichen Glückwunsch! Du hast das Lab zu Bindungen abgeschlossen. Du kannst in LabEx weitere Labs absolvieren, um deine Fähigkeiten zu verbessern.