Ein 'Option' entpacken
Teil des Abschnitts Logik & Kontrollfluss der Rust-Journey von Coddy. Lektion 38 von 66.
Manchmal müssen Sie den tatsächlichen Wert aus einem Option extrahieren, wenn Sie sicher sind, dass es ein Some enthält. Rust bietet die .unwrap()-Methode für diesen Zweck an – sie nimmt den Wert aus einem Some heraus und gibt ihn Ihnen direkt.
let maybe_number = Some(42);
let actual_number = maybe_number.unwrap();
println!("The number is: {}", actual_number);Wenn Sie .unwrap() auf ein Some(value) aufrufen, gibt es den inneren Wert zurück. Im obigen Beispiel wird actual_number zu 42 – nicht mehr in einem Option eingeschlossen.
Es gibt jedoch eine kritische Warnung: Wenn Sie .unwrap() auf einem None aufrufen, wird Ihr Programm eine Panic auslösen und sofort abstürzen. Dies macht .unwrap() zu einer potenziell gefährlichen Methode, die nur verwendet werden sollte, wenn Sie absolut sicher sind, dass das Option ein Some enthält.
let empty_option: Option<i32> = None;
let value = empty_option.unwrap(); // Dies wird eine Panic auslösen!Verwenden Sie .unwrap() sparsam und nur in Situationen, in denen Sie garantieren können, dass das Option einen Wert enthält, wie zum Beispiel in einfachen Beispielen oder wenn Sie bereits mit .is_some() geprüft haben.
Aufgabe
EinfachDu erhältst zwei Eingaben. Die erste Eingabe ist eine Zahl (als Zeichenkette), und die zweite Eingabe gibt an, ob diese Zahl als gültig oder ungültig behandelt werden soll. Wenn die zweite Eingabe valid ist, erstelle ein Option<i32>, das Some mit der geparsten Zahl enthält. Wenn die zweite Eingabe invalid ist, erstelle ein Option<i32>, das None enthält. Verwende .unwrap(), um den Wert aus dem Option zu extrahieren, und gib ihn aus.
Anforderungen:
- Lies die erste Eingabe und entferne Leerzeichen
- Lies die zweite Eingabe und entferne Leerzeichen
- Parse die erste Eingabe mit
.parse::<i32>()zui32 - Erstelle eine Variable vom Typ
Option<i32>:- Wenn die zweite Eingabe
validist, weiseSome(parsed_number)zu - Wenn die zweite Eingabe
invalidist, weiseNonezu
- Wenn die zweite Eingabe
- Verwende
.unwrap(), um den Wert aus demOptionzu extrahieren - Gib den entpackten Wert im Format
Value: [number]aus
Eingabe:
- Erste Zeile: Eine Zahl als Zeichenkette (z. B.
42) - Zweite Zeile: Entweder
validoderinvalid
Ausgabe:
- Wenn die zweite Eingabe
validist:Value: [number] - Wenn die zweite Eingabe
invalidist: Das Programm wird einen Panic auslösen (dieses Verhalten wird für diese Aufgabe erwartet)
Hinweis: Wenn die zweite Eingabe invalid ist, führt der Aufruf von .unwrap() auf None zu einem Panic. Dies veranschaulicht die gefährliche Natur von .unwrap(), wenn du nicht sicher bist, ob das Option einen Wert enthält.
Probier es selbst
use std::io;
fn main() {
// Erste Eingabe lesen (Zahl als String)
let mut number_input = String::new();
io::stdin().read_line(&mut number_input).expect("Failed to read line");
let number_input = number_input.trim();
// Zweite Eingabe lesen (valid oder invalid)
let mut validity_input = String::new();
io::stdin().read_line(&mut validity_input).expect("Failed to read line");
let validity_input = validity_input.trim();
// Die Zahl parsen
let parsed_number: i32 = number_input.parse().expect("Failed to parse number");
// TODO: Schreiben Sie Ihren Code unten
// Erstellen Sie ein Option<i32> basierend auf validity_input
// Wenn validity_input "valid" ist, weisen Sie Some(parsed_number) zu
// Wenn validity_input "invalid" ist, weisen Sie None zu
// Verwenden Sie dann .unwrap(), um den Wert zu extrahieren und geben Sie ihn im Format aus: Value: [number]
}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