07-常见的组合器
6.3.1 常见的组合器
让我们看一些适用于Option和Result类型的实用组合器。
map:此方法允许你将表示成功的值T转换为另一个值U。以下是Option类型对应的map特征签名:
pub fn map<U, F>(self, f: F) -> Option<U>
where F: FnOnce(T) -> U {
match self {
Some(x) => Some(f(x)),
None => None,
}
}
以下是和Result类型有关的签名:
pub fn map<U, F>(self, f: F) -> Option<U>
where F: FnOnce(T) -> U {
match self {
Ok(t) => Ok(f(t)),
Err(e) => Err(e)
}
}
此方法的类型签名可以做如下解读:map是U和F上的泛型方法,并且根据值获取self。然后它会接收一个F类型的参数f,并返回一个Option,其中F由FnOnce约束。该特征具有一个输入参数T和一个返回类型U。
简而言之,关于map方法有两个部分需要了解。首先,它将接收一个self参数,这意味着调用该方法的值将在调用之后被使用。其次,它会接收F类型的参数f。这是一个提供给map的闭包,以告知它如何完成从T到U的转换。闭包通常表示为F,where子句表示F是FnOnce(T)->U。
这是特征的某种特殊类型,仅适用于闭包,因此具有(T) -> U这样的函数签名。FnOnce前缀表示此闭包取得输入参数T的所有权,并且我们只能用T调用此闭包一次,因为T将在执行调用后被使用。我们将在第7章深入介绍闭包。如果闭包告知map只是执行失败后的某个值,那么map方法将不执行任何操作。