2个不稳定版本
0.2.0 | 2020年8月3日 |
---|---|
0.1.0 | 2020年2月22日 |
在过程宏中排名1497
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