はじめに
この実験では、Option
が Result
と相互作用する場合、または Result<T, Error1>
が Result<T, Error2>
と相互作用する場合の例を見ます。
注: 実験でファイル名が指定されていない場合は、好きなファイル名を使用できます。たとえば、
main.rs
を使用して、rustc main.rs &&./main
でコンパイルして実行できます。
This tutorial is from open-source community. Access the source code
💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください
この実験では、Option
が Result
と相互作用する場合、または Result<T, Error1>
が Result<T, Error2>
と相互作用する場合の例を見ます。
注: 実験でファイル名が指定されていない場合は、好きなファイル名を使用できます。たとえば、
main.rs
を使用して、rustc main.rs &&./main
でコンパイルして実行できます。
以前の例は常に非常に便利でした。Result
は他の Result
と相互作用し、Option
は他の Option
と相互作用します。
時には、Option
が Result
と相互作用する必要があり、または Result<T, Error1>
が Result<T, Error2>
と相互作用する必要があります。そのような場合、私たちは異なるエラー型を、それらが組み合わせやすく相互作用しやすいように管理したいと考えます。
次のコードでは、unwrap
の2つのインスタンスが異なるエラー型を生成します。Vec::first
は Option
を返し、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でさらに多くの実験を行って練習してください。