1 个不稳定版本
0.1.0 | 2023 年 2 月 2 日 |
---|
在 Rust 模式 中排名 #2548
每月下载量 87
用于 2 crates
26KB
586 行
Iterflow
Rust 函数式编程工具。
这个crate深受 itertools 启发,但主要关注操作链式开发以实现声明式方法(与常规命令式方法相对)
fn sub_1(n: u32) -> Result<u32, &'static str> {
if n == 0 { Err("illegal!") } else { Ok(n - 1) }
}
fn math_calc(n: u32) -> u32 {
(n + 1) * 2
}
fn to_range(n: u32) -> Range<u32> {
0..n
}
let it = (0..4)
.map(sub_1)
.and_then(sub_1)
.map_ok(math_calc)
.flat_map_ok(to_range);
iter_flow::assert_equal(
it,
vec![
Err("illegal!"),
Err("illegal!"),
Ok(0),
Ok(1),
Ok(0),
Ok(1),
Ok(2),
Ok(3),
],
);
待办事项
- 异步/等待与 Future 的支持
许可证
Iterflow 根据 Apache 许可证,版本 2.0 授权。有关完整许可证文本,请参阅 LICENSE。
lib.rs
:
额外的迭代器方法。
要使用此crate中的方法扩展 Iterator
,请导入 Iterflow
特性
use iter_flow::Iterflow;
现在,所有 Result 迭代器都提供了新的方法,如 and_then
let it = (0..4)
.map(|n| if n == 0 { Err("invalid!") } else { Ok(n - 1) })
.and_then(|n| if n > 0 { Ok(n - 1) } else { Err("illegal!") })
.map_ok(|n| (n + 1) * 2)
.flat_map_ok(|n| (0..n));
iter_flow::assert_equal(
it,
vec![
Err("invalid!"),
Err("illegal!"),
Ok(0),
Ok(1),
Ok(0),
Ok(1),
Ok(2),
Ok(3),
],
);