問題一覧に戻る
中級エラー処理
問題56: match式でのエラー処理

match式はResult型のエラー処理に最適で、OkとErrを明示的に処理できます。エラーの詳細情報を取り出し、種類ごとに異なる処理が可能です。kind()メソッドでエラーの種類を判別し、適切なメッセージや回復処理を実装できます。網羅性を保証し、全エラーケースを処理します。

use std::num::ParseIntError;

fn parse_and_double(s: &str) -> Result<i32, ParseIntError> {
// パターンマッチング
s.parse::<i32>() {
(n) => Ok(n * 2),
(e) => Err(e),
}
}

fn main() {
let inputs = vec!["42", "abc", "100"];

for input in inputs {
// 詳細なエラー処理
match parse_and_double(input) {
Ok(value) => println!("{} -> {}", input, value),
Err(e) => {
println!("{} failed: {}", input, e);
// エラーの種類
match e. {
std::num::IntErrorKind::InvalidDigit => {
println!(" Contains invalid characters");
}
_ => println!(" Other parsing error"),
}
}
}
}
}