Result map処理
Resultに用意されているmap処理
map
: Okの型を変換するmap_err
: Errの型を変換するmap_or
: 値をアンラップする。デフォルト値を渡せるmap_or_else
: 値をアンラップする。デフォルト値の評価を遅延評価する
map(成功時のmap処理)
Result<T, E>
から Result<U, E>
に変換する。
失敗時は何もしない。
let line = "1\n2\n3\n4\n"; for num in line.lines() { match num.parse::<i32>().map(|i| i * 2) { Ok(n) => println!("{}", n), Err(..) => {} } }
map_err(失敗時のmap処理)
Result<T, E>
からResult<T, F>
に変換する。
成功時は、何もしない。
let str = "abc"; let result = str.parse::<i32>(); // Result<i32, ParseIntErr> let result = parsed.map_err(|e| e.to_string()); // Result<i32, String>
カスタムのエラーを定義し、
From
トレイトを使ったエラーハンドリングを使うことで、mpa_errを避けることが出来る。
map_or(デフォルト値, 成功時のmap処理)
値のアンラップ。
成功時: 関数を適用する 失敗時: デフォルト値を返す
デフォルト値に、関数の呼び出し結果を渡す場合は、map_or_else
を使うと、遅延評価される。
let num_str = "xyz"; let num = num_str.parse::<i32>().map_or(42, |num| num * 2); println!("{}", num); // 42
map_or_else(デフォルト値の生成関数(遅延評価), 成功時のmap処理)
map_or
の遅延評価版。値のアンラップ。
成功時: map処理を呼び出す 失敗時: デフォルト値を生成する関数を呼び出す
let x = "xyz"; let ret = x.parse::<i32>().map_or_else(|_e| x.len() as i32, |v| v); println!("{}", ret);