3个稳定版本
5.0.1 | 2023年11月29日 |
---|---|
5.0.0 | 2023年11月27日 |
4.0.0 | 2023年10月15日 |
3.0.1 |
|
1.0.1 |
|
304 在 进程宏 中
94 每月下载量
12KB
239 行
set_builder
一个进程宏,用于使用Haskell风格的 集合构建器符号 定义的集合创建迭代器。
需要注意的是,这些“集合”并不是真正的集合,因为不能保证集合的成员(元素)是唯一的。
语法
复杂集合
// The pattern of the binding(s)
// │
// Mapping │ ┌── Expression that evaluate into types implementing `IntoIterator`.
// expression │ │
// │ │ │ ┌─ Predicate that evaluates to `bool`
// ▼ ▼ ▼ ▼
set![ expr : $($(pat <- expr) | $(expr)),* ]
简单枚举集合
这只是为了数学上的对称性,并返回数组而不是迭代器,应始终首选数组语法 [...]
而不是这个。
// ┌─ Values to put in the set
// ▼
set![ $(expr),* ]
示例
use set_builder::set;
// Single-binding set with a predicate
let set = set![ x * 2 : x <- [1, 2, 3], *x > 1 ];
assert_eq!(set.collect::<Vec<_>>(), [4, 6]);
// Cartesian product without a predicate
let set = set![ (x, y) : x <- [1, 2], y <- [3, 4] ];
assert_eq!(set.collect::<Vec<_>>(), [(1, 3), (1, 4), (2, 3), (2, 4)]);
// Simple enumeration
let set = set![ 1, 2, 3, 4, 5 ];
assert_eq!(set, [1, 2, 3, 4, 5]);
依赖关系
~320–780KB
~18K SLoC