2个不稳定版本

0.2.0 2020年8月3日
0.1.0 2020年2月22日

过程宏中排名1497

MIT许可证

9KB
131行代码(不包括注释)

comprehension-rs

Rust中的迭代器理解

用法

语法源自Haskell的列表理解。此库使用迭代器而不是列表。

// this returns the iterator generates `[0, 1, 4, ..., 81]`
iter![x * x; x <- 0..10];

您还可以在生成器中使用模式,

iter![x * y; (x, y) <- vec![(1, 1), (2, 3), (4, 5)]];
// => [1, 6, 20]

过滤值,

iter![(i, j); i <- 1.., j <- 1..i, gcd(i, j) == 1].take(10)
// => [(1, 1), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]

和let绑定。

iter![(i, j); i <- 1.., let k = i * i, j <- 1..=k].take(10);
// => [(1, 1), (2, 1), (2, 2), (2, 3), (2, 4), (3, 1), (3, 2), (3, 3), (3, 4), (3, 5)]

提供了一些有用的变体。

vect!返回Vec

// just same as iter![].collect::<Vec<_>>()
vect![x * x; x <- 0..10];

sum!返回迭代器的总和

let t = sum![x; x <- 1..=10]; // => 55

// same as this:
// let t = iter![x; x <- 1..=10].sum()

// but this does not compiles (need type annotation).
let t = iter![x; x <- 1..=10].sum::<i32>()

// `sum!` can infer the return type, so it has non-trivial functionality.

还包含product!

let t = product![x; <- 1..=10]; // => 3628800

依赖关系

~1.5MB
~35K SLoC