Result型 のアンラップとエラーの伝搬
Result<T, E>型の特徴
Rustは例外処理が存在しない代わりに、Result型でそれを実現する。
- 値のアンラップ
- エラーの伝搬
値のアンラップ
unwrap
: Err時、panic!を引き起こすunwrap_or
: Err時、デフォルト値を返すunwrap_or_else
: Err時、デフォルト値を生成する関数を呼び出すmap_or
: Ok時、map処理を呼び出し、Err時、デフォルト値を返すmap_or_else
: Ok時、map処理を呼び出し、Err時、デフォルト値を生成する関数を呼び出すexpect
: Err時、panic!を引き起こすが、メッセージを添付できる
unwrap
unwrap_or
unwrap_or_else
map_or
pub fn map_or<U, F>(self, default: U, f: F) -> U where F: FnOnce(T) -> T
Ok
時 関数を適用してその結果を返す。Err
時 デフォルト値を返す。
let x: Result<_, &str> = Ok("foo"); let len = x.map_or(42, |v| v.len()); // 値がNoneのときは、デフォルト値42が返される
map_or_else
pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U where D: FnOnce(E) -> U, F: FnOnce(T) -> U,
Ok
時 関数fを適用してその結果を返すErr
時 fallback関数を実行してその結果を返す。
let k = 21; let x : Result<_, &str> = Ok("foo"); assert_eq!(x.map_or_else(|e| k * 2, |v| v.len()), 3);
エラーの伝搬
map
: Okの型を変換するmap_err
: Errの型を変換する?演算子
: Err時、Resultをreturnする。