Binding und Destrukturierung in Rust

Beginner

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

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.

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.