Das Verwenden von Rust Match Guards

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 lernen wir, wie in Rust Match Guards verwendet werden, um Arme basierend auf Bedingungen zu filtern. Der Match Guard wird nach dem Muster hinzugefügt und wird durch das if-Schlüsselwort gefolgt von einer Bedingung dargestellt. Die Bedingung des Guards ermöglicht es uns, die Übereinstimmung von Mustern weiter zu verfeinern und zusätzliche Prüfungen durchzuführen, bevor der entsprechende Arm des Match-Ausdrucks ausgeführt wird. Es ist jedoch wichtig zu beachten, dass der Compiler die Guard-Bedingungen nicht bei der Prüfung der Musterabdeckung berücksichtigt, sodass es erforderlich ist, sicherzustellen, dass alle Muster weiterhin von dem Match-Ausdruck abgedeckt werden.

Hinweis: Wenn im Lab kein Dateiname angegeben ist, 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.

Guards

Ein match-Guard kann hinzugefügt werden, um den Arm zu filtern.

#[allow(dead_code)]
enum Temperature {
    Celsius(i32),
    Fahrenheit(i32),
}

fn main() {
    let temperature = Temperature::Celsius(35);
    // ^ TODO versuchen Sie verschiedene Werte für `temperature`

    match temperature {
        Temperature::Celsius(t) if t > 30 => println!("{}C ist über 30 Celsius", t),
        // Der `if-Bedingung`-Teil ^ ist ein Guard
        Temperature::Celsius(t) => println!("{}C ist unter 30 Celsius", t),

        Temperature::Fahrenheit(t) if t > 86 => println!("{}F ist über 86 Fahrenheit", t),
        Temperature::Fahrenheit(t) => println!("{}F ist unter 86 Fahrenheit", t),
    }
}

Beachten Sie, dass der Compiler die Guard-Bedingungen nicht berücksichtigt, wenn er überprüft, ob alle Muster vom Match-Ausdruck abgedeckt werden.

fn main() {
    let number: u8 = 4;

    match number {
        i if i == 0 => println!("Zero"),
        i if i > 0 => println!("Greater than zero"),
        // _ => unreachable!("Should never happen."),
        // TODO ^ kommentieren Sie diese Zeile aus, um die Kompilierung zu beheben
    }
}

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Guards-Lab abgeschlossen. Sie können in LabEx weitere Labs absolvieren, um Ihre Fähigkeiten zu verbessern.