'match' mit 'Option' verwenden
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 36 von 66.
Nachdem Sie nun verstanden haben, was Option ist, lernen wir die gängigste und expliziteste Art und Weise kennen, damit umzugehen: die Verwendung eines match-Ausdrucks. Dieser Ansatz zwingt Sie dazu, beide möglichen Fälle zu berücksichtigen – wenn ein Wert vorhanden ist und wenn nicht.
Der match-Ausdruck funktioniert perfekt mit Option, da man Zweige für beide Varianten erstellen kann:
let maybe_name = Some("Alice".to_string());
match maybe_name {
Some(name) => println!("Hello, {}!", name),
None => println!("Hello, stranger!"),
}Beachten Sie, wie der Some(name)-Zweig den Wert aus dem Inneren der Some-Variante extrahiert. Die Variable name enthält nun den eigentlichen String, nicht die Option. Dies wird als Destrukturierung bezeichnet – Sie ziehen den inneren Wert aus der Hülle heraus.
Der None-Zweig behandelt den Fall, in dem kein Wert vorhanden ist, was es Ihnen ermöglicht, ein alternatives Verhalten bereitzustellen, wie das Anzeigen einer Standardnachricht oder das Ausführen einer völlig anderen Aktion.
Aufgabe
EinfachSie erhalten einen Studentennamen als Eingabe. Der Name kann im System vorhanden sein oder fehlen. Erstellen Sie ein Option<String>, das Some(name) enthält, wenn der Name nicht leer ist, oder None, wenn der Name leer ist. Verwenden Sie einen match-Ausdruck, um beide Fälle zu behandeln und die entsprechende Nachricht auszugeben.
Anforderungen:
- Lesen Sie die Eingabe als String (Studentenname) ein
- Entfernen Sie alle Leerzeichen aus der Eingabe mit
.trim() - Erstellen Sie eine
Option<String>-Variable:- Wenn der bereinigte Name nicht leer ist, weisen Sie
Some(name.to_string())zu - Wenn der bereinigte Name leer ist, weisen Sie
Nonezu
- Wenn der bereinigte Name nicht leer ist, weisen Sie
- Verwenden Sie einen
match-Ausdruck, um beide Varianten derOptionzu behandeln - Geben Sie im
Some(name)-Zweig Folgendes aus:Welcome, [name]! - Geben Sie im
None-Zweig Folgendes aus:No name provided
Eingabe:
- Eine einzelne Zeile, die entweder einen Studentennamen oder eine leere Zeile enthält
Ausgabe:
- Wenn ein Name angegeben wird:
Welcome, [name]! - Wenn kein Name angegeben wird (leere Eingabe):
No name provided
Spickzettel
Verwenden Sie einen match-Ausdruck, um Option-Werte zu verarbeiten, indem Sie Zweige für beide Varianten erstellen:
let maybe_name = Some("Alice".to_string());
match maybe_name {
Some(name) => println!("Hello, {}!", name),
None => println!("Hello, stranger!"),
}Der Some(name)-Zweig verwendet Destrukturierung, um den inneren Wert aus der Some-Variante zu extrahieren. Die Variable name enthält den tatsächlichen Wert, nicht den Option-Wrapper.
Der None-Zweig behandelt den Fall, in dem kein Wert vorhanden ist, was es Ihnen ermöglicht, ein alternatives Verhalten bereitzustellen.
Probier es selbst
use std::io;
fn main() {
// Eingabe lesen
let mut input = String::new();
io::stdin().read_line(&mut input).expect("Failed to read line");
let name = input.trim();
// TODO: Erstelle ein Option<String> basierend darauf, ob der Name leer ist oder nicht
// TODO: Verwende einen match-Ausdruck, um die Fälle Some und None zu behandeln und die entsprechende Nachricht auszugeben
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logic & Flow
1Fortgeschrittener Kontrollfluss
Der 'match'-AusdruckAbgleichen mehrerer WerteBereiche abgleichenDer 'if let'-AusdruckSchleifen als AusdrückeRückblick – Einfacher Befehls-Parser4Daten gruppieren mit Structs
Was ist ein Struct?Übersicht über StructsZugriff auf Struct-FelderVeränderbare StructsStructs als FunktionsparameterTupel-StructsZusammenfassung – Ein Buch-Struct erstellen2Einführung in Vektoren
Was ist ein Vektor?Einen Vektor erstellenElemente mit push hinzufügenZugriff auf Vektor-ElementeÜber einen Vektor iterierenVeränderliche IterationElemente entfernenZusammenfassung – Einfacher Score-Tracker5Schlüssel-Wert-Paare mit Hash Maps
Was ist eine Hash Map?Erstellen einer Hash MapEinfügen von Schlüssel-Wert-PaarenZugreifen auf WerteIterieren über eine Hash MapAktualisieren eines WertesEntfernen eines PaaresZusammenfassung – Wortzähler8Projekt: Einfaches Artikelinventar
Projekt-SetupEinen Artikel hinzufügenLagerbestand prüfenEinen Artikel verkaufenAlles zusammenfügen11Abschluss-Herausforderungen
Wiederholung - Einzigartige ElementeWiederholung - Benutzerprofil-ValidatorWiederholung - Noten-Zusammenfassung3Kommandozeilen-To-Do-Liste
Projekt-SetupEine Aufgabe hinzufügenAlle Aufgaben anzeigenEine Aufgabe entfernenFinaler Code6Umgang mit fehlenden Werten mit 'Option'
Was ist ein 'Option'?'match' mit 'Option' verwendenis_some() und is_none()Ein 'Option' entpackenDie 'expect'-MethodeStandardwert bereitstellen: unwrap_orRückblick – Ein Element finden