1 个不稳定版本

0.1.0 2023 年 2 月 2 日

Rust 模式 中排名 #2548

Download history 5/week @ 2024-03-08 5/week @ 2024-03-15 15/week @ 2024-03-22 29/week @ 2024-03-29 12/week @ 2024-04-05 12/week @ 2024-04-12 12/week @ 2024-04-19 2/week @ 2024-04-26 4/week @ 2024-05-03 2/week @ 2024-05-10 10/week @ 2024-05-17 9/week @ 2024-05-24 16/week @ 2024-05-31 34/week @ 2024-06-07 26/week @ 2024-06-14 10/week @ 2024-06-21

每月下载量 87
用于 2 crates

Apache-2.0 协议

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),
    ],
);

没有运行时依赖