メモ置き場

OptionとResultのメソッドメモ

Option

論理演算系

pub fn and<U>(self, optb: Option<U>) -> Option<U>
pub fn or(self, optb: Option<T>) -> Option<T>
pub fn xor(self, optb: Option<T>) -> Option<T>
  • Some(v)をtrue、Noneをfalseとして、selfoptbを各演算子で短絡評価ありで評価した結果を返すイメージ
pub fn and_then<U, F>(self, f: F) -> Option<U>
where
    F: FnOnce(T) -> Option<U>,

pub fn or_else<F>(self, f: F) -> Option<T>
where
    F: FnOnce() -> Option<T>,
  • selff()を各演算子で短絡評価ありで評価した結果を返すイメージ

map系

pub fn map<U, F>(self, f: F) -> Option<U>
where
    F: FnOnce(T) -> U,
  • Someの中身をmapしてSomeに格納
Some(v)None
mapSome(f(v))None

map_or系

pub fn map_or<U, F>(self, default: U, f: F) -> U
where
    F: FnOnce(T) -> U,

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where
    D: FnOnce() -> U,
    F: FnOnce(T) -> U,
  • 戻り値の型はOption<U>ではなくU
  • Noneの場合はdefaultの値を返す
  • Someの場合は中身をmapしてそのまま返す
Some(v)None
map_orf(v)default
map_or_elsef(v)default()

ok系

pub fn ok_or<E>(self, err: E) -> Result<T, E>
pub fn ok_or_else<E, F>(self, err: F) -> Result<T, E>
where
    F: FnOnce() -> E,
  • Option → Resultの変換
Some(v)None
ok_orOk(v)Err(err)
ok_or_elseOk(v)Err(err())

transpose

impl<T, E> Option<Result<T, E>>
pub fn transpose(self) -> Result<Option<T>, E>
  • Option<Result<T, E>>Result<Option<T>, E>の変換
self変換後
NoneOk(None)
Some(Ok(v))Ok(Some(v))
Some(Err(err))Ok(Err(err))

Result

論理演算系

pub fn and<U>(self, res: Result<U, E>) -> Result<U, E>
pub fn or<F>(self, res: Result<T, F>) -> Result<T, F>
  • Ok(v)をtrue、Err(err)をfalseとして、selfresを各演算子で短絡評価ありで評価した結果を返すイメージ
pub fn and_then<U, F>(self, op: F) -> Result<U, E>
where
    F: FnOnce(T) -> Result<U, E>,

pub fn or_else<F, O>(self, op: O) -> Result<T, F>
where
    O: FnOnce(E) -> Result<T, F>,
  • selfop()を各演算子で短絡評価ありで評価した結果を返すイメージ

map系

pub fn map<U, F>(self, op: F) -> Result<U, E>
where
    F: FnOnce(T) -> U,

pub fn map_err<F, O>(self, op: O) -> Result<T, F>
where
    O: FnOnce(E) -> F,
  • Ok(v)とErr(err)の中身をそれぞれmapする
Ok(v)Err(err)
mapOk(op(v))Err(err)
map_errOk(v)Err(op(err))

map_or系

pub fn map_or<U, F>(self, default: U, f: F) -> U
where
    F: FnOnce(T) -> U,

pub fn map_or_else<U, D, F>(self, default: D, f: F) -> U
where
    D: FnOnce(E) -> U,
    F: FnOnce(T) -> U,
  • 戻り値の型はResult<U, E>ではなくU
  • Errの場合はdefaultの値を返す
  • Okの場合は中身をmapしてそのまま返す
Ok(v)Err(err)
map_orop(v)default
map_or_elseop(v)default()

transpose

impl<T, E> Result<Option<T>, E>
pub fn transpose(self) -> Option<Result<T, E>>
  • Result<Option<T>, E>Option<Result<T, E>>の変換
self変換後
Ok(None)None
Ok(Some(v))Some(Ok(v))
Err(err)Some(Err(err))