複数のエラー型

RustRustBeginner
今すぐ練習

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

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、OptionResult と相互作用する場合、または Result<T, Error1>Result<T, Error2> と相互作用する場合の例を見ます。

注: 実験でファイル名が指定されていない場合は、好きなファイル名を使用できます。たとえば、main.rs を使用して、rustc main.rs &&./main でコンパイルして実行できます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL rust(("Rust")) -.-> rust/FunctionsandClosuresGroup(["Functions and Closures"]) rust(("Rust")) -.-> rust/MemorySafetyandManagementGroup(["Memory Safety and Management"]) rust(("Rust")) -.-> rust/DataStructuresandEnumsGroup(["Data Structures and Enums"]) rust(("Rust")) -.-> rust/BasicConceptsGroup(["Basic Concepts"]) rust(("Rust")) -.-> rust/DataTypesGroup(["Data Types"]) 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{{"複数のエラー型"}} rust/integer_types -.-> lab-99244{{"複数のエラー型"}} rust/string_type -.-> lab-99244{{"複数のエラー型"}} rust/function_syntax -.-> lab-99244{{"複数のエラー型"}} rust/expressions_statements -.-> lab-99244{{"複数のエラー型"}} rust/lifetime_specifiers -.-> lab-99244{{"複数のエラー型"}} rust/method_syntax -.-> lab-99244{{"複数のエラー型"}} end

複数のエラー型

以前の例は常に非常に便利でした。Result は他の Result と相互作用し、Option は他の Option と相互作用します。

時には、OptionResult と相互作用する必要があり、または Result<T, Error1>Result<T, Error2> と相互作用する必要があります。そのような場合、私たちは異なるエラー型を、それらが組み合わせやすく相互作用しやすいように管理したいと考えます。

次のコードでは、unwrap の2つのインスタンスが異なるエラー型を生成します。Vec::firstOption を返し、parse::<i32>Result<i32, ParseIntError> を返します。

fn double_first(vec: Vec<&str>) -> i32 {
    let first = vec.first().unwrap(); // エラー1を生成
    2 * first.parse::<i32>().unwrap() // エラー2を生成
}

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

    println!("The first doubled is {}", double_first(numbers));

    println!("The first doubled is {}", double_first(empty));
    // エラー1: 入力ベクトルが空です

    println!("The first doubled is {}", double_first(strings));
    // エラー2: 要素が数値にパースできません
}

次のセクションでは、この種の問題を処理するためのいくつかの戦略を見ていきます。

まとめ

おめでとうございます!あなたは複数のエラー型の実験を完了しました。あなたの技術を向上させるために、LabExでさらに多くの実験を行って練習してください。