rustのResultエラー処理方法は何ですか?
Rustには、エラーが発生する可能性のある操作を処理するための一つの方法としてResult型が存在します。Result型の定義は以下の通りです。
enum Result<T, E> {
Ok(T),
Err(E),
}
Tは成功した操作の戻り値の型を表し、Eは失敗した操作の戻り値のエラーの型を表します。
Result型を使用したエラー処理には、主に2つの方法があります:match式を使用する方法と?演算子を使用する方法。
- 試合
fn read_file() -> Result<String, io::Error> {
let file = File::open("file.txt");
match file {
Ok(mut f) => {
let mut contents = String::new();
f.read_to_string(&mut contents)?;
Ok(contents)
}
Err(e) => Err(e),
}
}
上記の例では、read_file関数がファイルを開き、その内容を文字列として読み取ろうとしています。ファイルのオープンと読み取りが成功した場合はOk(contents)を返し、失敗した場合はErr(e)を返します。
- 彼は自分の意見をはっきりと述べた。
fn read_file() -> Result<String, io::Error> {
let mut file = File::open("file.txt")?;
let mut contents = String::new();
file.read_to_string(&mut contents)?;
Ok(contents)
}
上記の例では、?演算子を使用して、match式でのOkとErrのブランチを置き換えることができます。操作が成功した場合は、後続の文が実行されます。操作が失敗した場合は、エラーが直接返されます。
関数の戻り値の型がResult型であることと、関数内のすべてのエラーを処理するために?演算子を使用する必要がある。
Rustでは、エラーを処理するための一般的な2つの方法があり、開発者は具体的な要件に応じて適切な方法を選択できます。