2次发布
0.0.2 | 2021年5月22日 |
---|---|
0.0.1 | 2021年5月22日 |
#2039 in Rust模式
12KB
97 行
Rust迭代器扩展,用于有效地操作Result
。
try_map_all
以及,目前,它的朋友 try_map_all_opt
将闭包应用于迭代器的所有项,直到其中一个失败(或全部成功)。
参数:
f
:可能失败的映射函数
返回:所有成功的迭代器,或第一个失败。
示例
对于使用 ?
运算符将失败从闭包中传播出来非常有用
fn parse_all_numbers(strs: &Vec<&str>) -> Result<Vec<u64>, std::num::ParseIntError> {
Ok(strs.iter().try_map_all(|s| s.parse())?.collect())
}
或者对于 Option
fn not_zero(is: Vec<u64>) -> Option<Vec<u64>> {
Some(is.iter().try_map_all_opt(|i| if i > 0 { Some(i) } else { None })?.collect())
}
try_all
确保迭代器的所有项都是Ok,否则返回第一个失败。
返回:所有成功的迭代器,或第一个失败。
示例
对于使用 ?
运算符将失败从闭包中传播出来非常有用
fn parse_all_numbers(strs: &Vec<&str>) -> Result<Vec<u64>, std::num::ParseIntError> {
Ok(strs.iter().map(|s| s.parse()).try_all()?.collect())
}