1 个不稳定版本
使用旧的 Rust 2015
0.1.0 | 2016 年 2 月 19 日 |
---|
#2918 在 Rust 模式
8KB
try_into_opt!
概述
类似于 try!
,但将 Result
转换为 Option
,主要用于 filter_map
。提供类似于 try!
在 map
中的错误早期返回。
try_into_opt!
与 try_opt! 不同,后者为返回 Option
的函数提供早期返回。 try_into_opt
在返回 Result
的函数上操作,但你的代码需要一个选项。这种情况可能在执行可能失败的 IO 时出现,如果成功,则需要以某种方式进行过滤。
用法
将此添加到您的 Cargo.toml
[dependencies]
try_into_opt = "0.1.0"
并将其添加到您的包中
#[macro_use]
extern crate try_into_opt;
示例
#[macro_use]
extern crate try_into_opt;
const MAX_NUM: usize = 11usize;
fn num_range_filter(v: &[usize]) -> Result<Vec<usize>, String> {
v.iter()
.filter_map(|i| {
let i = try_into_opt!(validate_num(*i));
// do some filtering...
if i == 5 {
None
} else {
Some(Ok(i))
}
})
.collect()
}
fn validate_num(i: usize) -> Result<usize, String> {
if i > MAX_NUM {
Err(format!("{} is larger than the allowed max of {}", i, MAX_NUM))
} else {
Ok(i)
}
}
fn main() {
let nums = num_range_filter(&[1, 2, 3, 10, 12, 0]);
assert_eq!(nums.is_err(), true);
let nums = num_range_filter(&[1, 2, 5, 3, 5, 10, 0, 5]).unwrap();
assert_eq!(nums, [1, 2, 3, 10, 0]);
}
有关更多详细信息,请参阅 文档。
许可
此库以与 Rust 相似的方式分发:MIT 许可证和 Apache 许可证(版本 2.0)的双重许可。
有关详细信息,请参阅 LICENSE-APACHE、LICENSE-MIT 和 COPYRIGHT。
依赖项
~40KB