2 个版本
0.1.1 | 2024年7月10日 |
---|---|
0.1.0 | 2024年7月8日 |
#770 在 Rust 模式
每月下载量 232
11KB
93 行
可出错映射
fallible_map
提供了在 Option
类型和迭代器上执行可出错映射操作的实用工具,允许使用可以返回 Result
的函数。
该库包括用于增强 Option
和 Iterator
类型并带有处理可出错操作方法的特质的特性。
概述
该包为可选值和迭代器提供扩展,以执行可出错映射操作,返回在计算过程中正确反映潜在错误的结果。
这些扩展在需要错误处理的操作可能失败的情况下非常有用。
特性
- ExtractOption 特质:一个辅助特质,用于提取可选容器内的内部值;
- FallibleMapExt 特质:扩展
Option
,增加了用于可出错操作的函数,如try_map
、try_unwrap_or
和try_and_then
; - FallibleMapIteratorExt 特质:扩展迭代器以具有
try_map
方法,允许在迭代过程中使用返回Result
的函数,提供用于无缝链式和收集的迭代器适配器。
安装
将以下内容添加到您的 Cargo.toml
[dependencies]
fallible_map = "^0.1"
用法
示例
使用 FallibleMapExt 和 Option
use fallible_map::FallibleMapExt;
fn main() -> Result<(), String> {
let some_number: Option<i32> = Some(2);
let result: Result<Option<i32>, String> = some_number.try_map(|num| {
if num % 2 == 0 {
Ok(num * 2)
} else {
Err("Odd number".to_string())
}
});
assert_eq!(result, Ok(Some(4)));
Ok(())
}
使用 FallibleMapExt 和 try_and_then
use fallible_map::FallibleMapExt;
fn main() -> Result<(), String> {
let some_number: Option<i32> = Some(2);
let result: Result<Option<i32>, String> = some_number.try_and_then(|num| {
if num % 2 == 0 {
Ok(Some(num * 2))
} else {
Err("Odd number".to_string())
}
});
assert_eq!(result, Ok(Some(4)));
let none_number: Option<i32> = None;
let result = none_number.try_and_then(|num| {
if num % 2 == 0 {
Ok(Some(num * 2))
} else {
Err("Odd number".to_string())
}
});
assert_eq!(result, Ok(None));
Ok(())
}
使用 FallibleMapIteratorExt 和 Iterator
use fallible_map::FallibleMapIteratorExt;
fn main() -> Result<(), String> {
let numbers = vec![1, 2, 3, 4, 5];
let mapped_numbers: Result<Vec<i32>, String> = numbers.into_iter().try_map(|x| {
if x % 2 == 0 {
Ok(x * 2)
} else {
Err(format!("Failed to process {}", x))
}
}).collect();
match mapped_numbers {
Ok(nums) => println!("Mapped successfully: {:?}", nums),
Err(e) => println!("Error occurred: {}", e),
}
Ok(())
}
许可协议
本项目采用 MIT 许可协议。有关详细信息,请参阅 LICENSE 文件。
贡献
欢迎贡献!请随时提交拉取请求、打开问题或提出功能和改进建议。