問題一覧に戻る
中級エラー処理
問題62: From/Intoトレイトでのエラー変換
Fromトレイトを実装すると、?演算子で自動的にエラー型が変換されます。複数のエラー源を統一的に扱え、コードが簡潔になります。Fromを実装するとIntoも自動的に実装されます。エラー処理の柔軟性と統一性を向上させる重要なパターンです。
#[derive(Debug)]
enum MyError {
Io(std::io::Error),
Parse(std::num::ParseIntError),
}
// Fromトレイト
impl for MyError {
fn from(err: std::io::Error) -> Self {
MyError::(err)
}
}
impl From<std::num::ParseIntError> for MyError {
fn (err: std::num::ParseIntError) -> {
MyError::Parse(err)
}
}
fn process() -> Result<i32, MyError> {
let data = std::fs::read_to_string("data.txt")?;
let num = data.trim().parse()?;
Ok(num)
}