Mehrere Fehlertypen

RustRustBeginner
Jetzt üben

This tutorial is from open-source community. Access the source code

💡 Dieser Artikel wurde von AI-Assistenten übersetzt. Um die englische Version anzuzeigen, können Sie hier klicken

Einführung

In diesem Lab sehen wir ein Beispiel, in dem eine Option mit einem Result interagieren muss, oder ein Result<T, Error1> mit einem Result<T, Error2> interagieren muss.

Hinweis: Wenn das Lab keinen Dateinamen angibt, können Sie einen beliebigen Dateinamen verwenden. Beispielsweise können Sie main.rs verwenden und es mit rustc main.rs &&./main kompilieren und ausführen.


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust/BasicConceptsGroup -.-> rust/variable_declarations("Variable Declarations") rust/DataTypesGroup -.-> rust/integer_types("Integer Types") rust/DataTypesGroup -.-> rust/string_type("String Type") rust/FunctionsandClosuresGroup -.-> rust/function_syntax("Function Syntax") rust/FunctionsandClosuresGroup -.-> rust/expressions_statements("Expressions and Statements") rust/MemorySafetyandManagementGroup -.-> rust/lifetime_specifiers("Lifetime Specifiers") rust/DataStructuresandEnumsGroup -.-> rust/method_syntax("Method Syntax") subgraph Lab Skills rust/variable_declarations -.-> lab-99244{{"Mehrere Fehlertypen"}} rust/integer_types -.-> lab-99244{{"Mehrere Fehlertypen"}} rust/string_type -.-> lab-99244{{"Mehrere Fehlertypen"}} rust/function_syntax -.-> lab-99244{{"Mehrere Fehlertypen"}} rust/expressions_statements -.-> lab-99244{{"Mehrere Fehlertypen"}} rust/lifetime_specifiers -.-> lab-99244{{"Mehrere Fehlertypen"}} rust/method_syntax -.-> lab-99244{{"Mehrere Fehlertypen"}} end

Mehrere Fehlertypen

Die vorherigen Beispiele waren immer sehr bequem; Results interagieren mit anderen Results und Options interagieren mit anderen Options.

Manchmal muss eine Option mit einem Result interagieren, oder ein Result<T, Error1> muss mit einem Result<T, Error2> interagieren. In diesen Fällen möchten wir unsere verschiedenen Fehlertypen auf eine Weise verwalten, die sie komposierbar und einfach zu interagieren macht.

Im folgenden Code erzeugen zwei Instanzen von unwrap verschiedene Fehlertypen. Vec::first gibt eine Option zurück, während parse::<i32> ein Result<i32, ParseIntError> zurückgibt:

fn double_first(vec: Vec<&str>) -> i32 {
    let first = vec.first().unwrap(); // Erzeugt Fehler 1
    2 * first.parse::<i32>().unwrap() // Erzeugt Fehler 2
}

fn main() {
    let numbers = vec!["42", "93", "18"];
    let empty = vec![];
    let strings = vec!["tofu", "93", "18"];

    println!("Das erste verdoppelt ist {}", double_first(numbers));

    println!("Das erste verdoppelt ist {}", double_first(empty));
    // Fehler 1: Der Eingabevektor ist leer

    println!("Das erste verdoppelt ist {}", double_first(strings));
    // Fehler 2: Das Element kann nicht in eine Zahl umgewandelt werden
}

In den nächsten Abschnitten werden wir mehrere Strategien kennenlernen, um solche Probleme zu behandeln.

Zusammenfassung

Herzlichen Glückwunsch! Sie haben das Lab Mehrere Fehlertypen abgeschlossen. Sie können in LabEx weitere Labs ausprobieren, um Ihre Fähigkeiten zu verbessern.