Option 与 Result 都会有一些常用的快捷函数操作,总结归纳一下。

map

接收一个匿名函数

  • Result:会将一个 Result<T, E> 映射到 Result<U, E>
  • Option:会将一个 Option<T> 映射到 Option<U>

map_or

接收一个默认值 U,一个匿名函数

  • Result:会将一个 Result<T, E> 映射到默认值 U,或者匿名函数返回的 U
  • Option:会将一个 Option<T> 映射到默认值 U,或者匿名函数返回的 U

map_or_else

接收一个默认匿名函数,还有另一个匿名函数

  • Result:会将一个 Result<T, E> 错误时执行默认匿名函数,返回 U;Ok 时执行另一个匿名函数,返回 U。
  • Option:None 时执行执行默认匿名函数,返回 U;Some 时执行另一个匿名函数,返回 U。

unwrap

不解释

unwrap_or

需要提供一个默认值 T

  • Result:将 Result<T, E> 返回 T
  • Option:将 Option<T> 返回 T

unwrap_or_default

不需要参数

  • Result:将 Result<T, E> 返回 T,错误则返回 T 类型的默认值;
  • Option:将 Option<T> 返回 T,none 则返回 T 类型的默认值;

unwrap_or_else

需要一个闭包,闭包返回 T

  • Result:将 Result<T,E> 返回 T,如果错误则调用闭包依然返回 T;
  • Option:将 Option<T> 返回 T,如果是 None 则调用闭包依然返回 T;

    or

    需要另一个相同类型的值

  • Result:将 Result<T, E> 为 E 时,返回参数;

  • Option:将 Option<T> 中的 None,返回参数;

说明:A.or_else(B) 如果 A 为「异常」值,那么返回 B

or_else

需要一个闭包

  • Result:将 Result<T, E> 中返回的 E,转为 F,最终结果为 Result<T, F>
  • Option:将 Option<T> 中的 None,转为另一个 Option<T>

说明:A.or_else(B) 如果 A 为「异常」值,那么返回 B 的执行结果

upwrap_err/upwrap_none

  • Result:返回 E
  • nightly

其他

  • ok from Result<T, E> to Option<T>
  • ok_or 将 Option<T> 转为 Result<T, E> 直接提供一个 err
  • ok_or_else 将 Option<T> 转为 Result<T, E> 提供一个闭包