Rust Option/Result 实用方法

Rust特有的OptionResult,给开发者增加了一些工作量,标准库为了减少这部分工作,提供了不少实用的方法,这其中以mapokand尤为常见。
下面以Option为例讲解:

Option

map函数只是帮助开发者少写一些match,常用于从Option取出值,传到闭包里面执行,map的返回值是也是一个Option,包的是闭包的返回值。

pub fn map<U, F: FnOnce(T) -> U>(self, f: F) -> Option<U> {
    match self {
        Some(x) => Some(f(x)),
        None => None,
    }
}

map_ormap_or_else的返回值类型就是闭包F的返回值类型。
两者的区别是:default是直接传入,还是由传入的闭包产生的。

pub fn map_or<U, F: FnOnce(T) -> U>(self, default: U, f: F) -> U {
    match self {
        Some(t) => f(t),
        None => default,
    }
}

pub fn map_or_else<U, D: FnOnce() -> U, F: FnOnce(T) -> U>(self, default: D, f: F) -> U {
    match self {
        Some(t) => f(t),
        None => default(),
    }
}

ok_orok_or_else的作用是将Option转化为Result
两者的区别是err是直接传入的,还是由传入的闭包产生的。

pub fn ok_or<E>(self, err: E) -> Result<T, E> {
    match self {
        Some(v) => Ok(v),
        None => Err(err),
    }
}

pub fn ok_or_else<E, F: FnOnce() -> E>(self, err: F) -> Result<T, E> {
    match self {
        Some(v) => Ok(v),
        None => Err(err()),
    }
}

andand_then的作用是将一个Option转换为另外一个Option
两者的区别是新的Option是直接传入的,还是由传入的闭包产生的。

pub fn and<U>(self, optb: Option<U>) -> Option<U> {
    match self {
        Some(_) => optb,
        None => None,
    }
}

pub fn and_then<U, F: FnOnce(T) -> Option<U>>(self, f: F) -> Option<U> {
    match self {
        Some(x) => f(x),
        None => None,
    }
}

orand是相反的,or是self为None时返回新的Option

pub fn or(self, optb: Option<T>) -> Option<T> {
    match self {
        Some(_) => self,
        None => optb,
    }
}

pub fn or_else<F: FnOnce() -> Option<T>>(self, f: F) -> Option<T> {
    match self {
        Some(_) => self,
        None => f(),
    }
}

你可能感兴趣的:(Rust)