Abkürzungen: unwrap und expect
Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 45 von 66.
Du hast bereits .unwrap() und .expect() mit Option kennengelernt, und dieselben Methoden funktionieren auch mit Result. Ihr Verhalten ist jedoch beim Umgang mit Erfolgs- und Fehlerfällen etwas anders.
Die Methode .unwrap() extrahiert den Wert aus einer Ok-Variante. Wenn das Result jedoch ein Err ist, gerät dein Programm in Panik und stürzt ab. Ebenso macht .expect() dasselbe, ermöglicht dir aber, eine benutzerdefinierte Panikmeldung anzugeben, die das Debuggen erleichtert:
let success: Result = Ok(42);
let value = success.expect("This should work!");
println!("Value: {}", value); // Gibt aus: Value: 42
// Dies würde mit der benutzerdefinierten Meldung einen Panic auslösen:
// let failure: Result = Err("Something went wrong");
// let value = failure.expect("This should work!"); // Löst einen Panic aus!Diese Methoden ermöglichen zwar einen schnellen Zugriff auf erfolgreiche Werte, sollten aber mit Bedacht eingesetzt werden. Sie eignen sich am besten, wenn du dir absolut sicher bist, dass die Operation erfolgreich sein wird, oder während der Entwicklung und des Testens.
Aufgabe
EinfachDu erhältst zwei Eingaben. Die erste Eingabe ist eine Zahl (als Zeichenfolge), und die zweite Eingabe ist eine Statusanzeige (ok oder error). Erstelle anhand des Status ein Result<i32, &'static str>. Wenn der Status ok ist, erstelle ein Ok, das die geparste Zahl enthält. Wenn der Status error ist, erstelle ein Err mit der Meldung "Invalid operation". Verwende .expect() mit einer benutzerdefinierten Meldung, um den Wert aus dem Result auszulesen und auszugeben.
Anforderungen:
- Lies die erste Eingabe (Zahl) ein und entferne Leerraum am Anfang und Ende
- Wandle die erste Eingabe in
i32um - Lies die zweite Eingabe (Status) ein und entferne Leerraum am Anfang und Ende
- Erstelle eine Variable vom Typ
Result<i32, &'static str>:- Wenn der Status
okist, weiseOk(parsed_number)zu - Wenn der Status
errorist, weiseErr("Invalid operation")zu
- Wenn der Status
- Verwende
.expect("Failed to get value"), um den Wert aus demResultauszulesen - Gib den ausgelesenen Wert im folgenden Format aus:
Value: [value]
Eingabe:
- Erste Zeile: Eine Zahl (z. B.
75) - Zweite Zeile: Entweder
okodererror
Ausgabe:
- Wenn der Status
okist:Value: [number] - Wenn der Status
errorist: Das Programm löst eine Panic mit der benutzerdefinierten Meldung aus (wird in dieser Aufgabe nicht getestet)
Hinweis: Für diese Aufgabe verwenden die Testfälle nur den Status ok, um eine erfolgreiche Ausführung sicherzustellen. Der Fall error würde eine Panic auslösen. Das ist das erwartete Verhalten von .expect(), wenn ein Err auftritt.
Probier es selbst
use std::io;
fn main() {
// Lies die erste Eingabe (Zahl) ein
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Wandle die Zahl in i32 um
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// Lies die zweite Eingabe (Status) ein
let mut status = String::new();
io::stdin().read_line(&mut status).expect("Failed to read line");
let status = status.trim();
// TODO: Schreibe deinen Code unten
// Erstelle ein Result<i32, &'static str> basierend auf dem Status
// Verwende .expect(), um den Wert zu extrahieren
// Gib das Ergebnis im Format Value: [value] aus
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Kontrollfluss
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 erstellen7Fehlerbehandlung mit 'Result'
Was ist ein 'Result'?'match' mit 'Result' verwendenis_ok() und is_err()Abkürzungen: unwrap und expectDer Fragezeichen-Operator '?'Strings in Zahlen parsenZusammenfassung – Sichere Divisionsfunktion2Einfü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 CodeÜbe selbstständig: Online-Rust-Compiler