'match' mit 'Result' verwenden
Teil des Abschnitts Logic & Flow der Rust-Journey von Coddy — Lektion 43 von 66.
Nachdem Sie nun verstehen, was ein Result ist, lernen wir nun die expliziteste und leistungsfähigste Methode kennen, um sowohl Erfolgs- als auch Fehlerfälle zu behandeln: die Verwendung eines match-Ausdrucks.
Genau wie bei Option zwingt dich match dazu, beide Varianten eines Result zu behandeln. Du erstellst einen Zweig für Ok, um den Erfolg zu behandeln, und einen weiteren Zweig für Err, um den Fehler zu behandeln:
let result = divide(10, 2);
match result {
Ok(value) => println!("Division successful: {}", value),
Err(error) => println!("Division failed: {}", error),
}Wenn das Result Ok ist, extrahiert das match den erfolgreichen Wert und führt den ersten Zweig aus. Wenn es Err ist, extrahiert es die Fehlerinformationen und führt den zweiten Zweig aus. Dieses Muster stellt sicher, dass Sie niemals versehentlich einen potenziellen Fehler ignorieren.
Aufgabe
EinfachSie erhalten zwei Eingaben. Die erste Eingabe ist eine Zahl (als String) und die zweite Eingabe ist eine weitere Zahl (als String). Erstellen Sie eine Funktion, die versucht, die erste Zahl durch die zweite Zahl zu dividieren und ein Result<f64, &'static str> zurückgibt. Wenn die zweite Zahl Null ist, geben Sie ein Err mit der Nachricht "Division by zero" zurück. Andernfalls geben Sie Ok mit dem Divisionsergebnis zurück. Verwenden Sie einen match-Ausdruck, um sowohl den Ok- als auch den Err-Fall zu behandeln und die entsprechende Nachricht auszugeben.
Anforderungen:
- Lesen Sie die erste Eingabe (Dividend) ein und entfernen Sie Leerzeichen
- Parsen Sie die erste Eingabe zu
f64 - Lesen Sie die zweite Eingabe (Divisor) ein und entfernen Sie Leerzeichen
- Parsen Sie die zweite Eingabe zu
f64 - Erstellen Sie eine Funktion, die zwei
f64-Parameter entgegennimmt undResult<f64, &'static str>zurückgibt - Prüfen Sie innerhalb der Funktion, ob der Divisor
0.0ist:- Wenn ja, geben Sie
Err("Division by zero")zurück - Wenn nein, geben Sie
Ok(dividend / divisor)zurück
- Wenn ja, geben Sie
- Rufen Sie die Funktion mit den beiden geparsten Zahlen auf
- Verwenden Sie einen
match-Ausdruck, um dasResultzu behandeln - Im
Ok(value)-Zweig geben Sie Folgendes aus:Result: [value] - Im
Err(error)-Zweig geben Sie Folgendes aus:Error: [error]
Eingabe:
- Erste Zeile: Eine Zahl, die den Dividenden darstellt (z. B.
10.0) - Zweite Zeile: Eine Zahl, die den Divisor darstellt (z. B.
2.0)
Ausgabe:
- Wenn die Division erfolgreich ist:
Result: [result] - Bei Division durch Null:
Error: Division by zero
Spickzettel
Verwenden Sie match, um sowohl die Ok- als auch die Err-Varianten eines Result zu behandeln:
let result = divide(10, 2);
match result {
Ok(value) => println!("Division successful: {}", value),
Err(error) => println!("Division failed: {}", error),
}Der match-Ausdruck zwingt Sie dazu, sowohl Erfolgs- als auch Fehlerfälle zu behandeln. Wenn das Result Ok ist, extrahiert es den erfolgreichen Wert und führt den ersten Zweig aus. Wenn es Err ist, extrahiert es die Fehlerinformationen und führt den zweiten Zweig aus.
Probier es selbst
use std::io;
// TODO: Erstellen Sie hier Ihre Divisionsfunktion, die Result<f64, &'static str> zurückgibt
fn main() {
// Erste Eingabe lesen (Dividend)
let mut dividend_input = String::new();
io::stdin().read_line(&mut dividend_input).expect("Failed to read line");
let dividend: f64 = dividend_input.trim().parse().expect("Invalid number");
// Zweite Eingabe lesen (Divisor)
let mut divisor_input = String::new();
io::stdin().read_line(&mut divisor_input).expect("Failed to read line");
let divisor: f64 = divisor_input.trim().parse().expect("Invalid number");
// TODO: Rufen Sie Ihre Divisionsfunktion auf und verwenden Sie match, um das Result zu verarbeiten
// Geben Sie "Result: [value]" für den Ok-Fall aus
// Geben Sie "Error: [error]" für den Err-Fall aus
}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 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