#iterator #failure #extend #results #try #convert #operator

try_all

扩展迭代器以使用 try_all 将结果迭代器转换为包含成功的迭代器

2次发布

0.0.2 2021年5月22日
0.0.1 2021年5月22日

#2039 in Rust模式

MIT 许可证

12KB
97

crates.io

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())
}

无运行时依赖