Die 'expect'-Methode
Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 39 von 66.
Während .unwrap() seine Aufgabe erfüllt, hat es einen großen Nachteil: Wenn es bei einem None einen Panic auslöst, ist die Fehlermeldung generisch und wenig hilfreich. Hier kommt .expect() zur Rettung.
Die Methode .expect() funktioniert genau wie .unwrap() – sie extrahiert den Wert aus einem Some und löst bei einem None eine Panic aus. Der Hauptunterschied besteht darin, dass .expect() es Ihnen ermöglicht, eine benutzerdefinierte Panic-Nachricht anzugeben:
let maybe_score = Some(95);
let score = maybe_score.expect("Score should always be present");
println!("Your score is: {}", score);Wenn das Option ein Some enthält, gibt .expect() den inneren Wert zurück, genau wie .unwrap(). Wenn es jedoch ein None ist, sehen Sie anstelle einer generischen Panic-Meldung Ihre benutzerdefinierte Nachricht, was es viel einfacher macht zu verstehen, was schiefgelaufen ist und wo.
Aufgabe
EinfachDu erhältst zwei Eingaben. Die erste Eingabe ist ein Produktname, und die zweite Eingabe gibt an, ob das Produkt auf Lager ist (yes) oder nicht auf Lager ist (no). Erstelle ein Option<String>, das Some(product_name) enthält, wenn das Produkt auf Lager ist, oder None, wenn es nicht auf Lager ist. Verwende .expect() mit einer aussagekräftigen Meldung, um den Produktnamen zu extrahieren und auszugeben.
Anforderungen:
- Lies die erste Eingabe (Produktname) ein und entferne Leerzeichen
- Lies die zweite Eingabe (Lagerstatus) ein und entferne Leerzeichen
- Erstelle eine Variable vom Typ
Option<String>:- Wenn der Lagerstatus
yesist, weiseSome(product_name.to_string())zu - Wenn der Lagerstatus
noist, weiseNonezu
- Wenn der Lagerstatus
- Verwende
.expect()mit der Meldung"Product should be in stock", um den Produktnamen zu extrahieren - Gib den extrahierten Produktnamen im Format
Product available: [product_name]aus
Eingabe:
- Erste Zeile: Ein Produktname (z. B.
Laptop) - Zweite Zeile: Entweder
yesoderno
Ausgabe:
- Wenn der Lagerstatus
yesist:Product available: [product_name] - Wenn der Lagerstatus
noist: Das Programm bricht mit der benutzerdefinierten Meldung „Product should be in stock“ ab (dieses Verhalten wird für diese Aufgabe erwartet)
Hinweis: Wenn der Lagerstatus no ist, verursacht der Aufruf von .expect() auf None einen Abbruch mit deiner benutzerdefinierten Meldung. Dies veranschaulicht, wie .expect() im Vergleich zu .unwrap() hilfreichere Fehlerinformationen liefert.
Probier es selbst
use std::io;
fn main() {
// Produktnamen lesen
let mut product_name = String::new();
io::stdin().read_line(&mut product_name).expect("Failed to read line");
let product_name = product_name.trim();
// Lagerstatus lesen
let mut stock_status = String::new();
io::stdin().read_line(&mut stock_status).expect("Failed to read line");
let stock_status = stock_status.trim();
// TODO: Schreiben Sie Ihren Code unten
// Erstellen Sie ein Option<String> basierend auf stock_status
// Verwenden Sie .expect(), um den Produktnamen zu extrahieren
// Geben Sie das Ergebnis im Format aus: Product available: [product_name]
}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 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Übe selbstständig: Online-Rust-Compiler