7 个版本
0.2.2 | 2020 年 3 月 9 日 |
---|---|
0.2.1 | 2019 年 11 月 7 日 |
0.1.3 | 2018 年 9 月 16 日 |
0.1.2 | 2018 年 5 月 1 日 |
0.1.1 | 2018 年 4 月 16 日 |
#2301 in Rust 模式
22 每月下载量
16KB
220 行
mapcomp
通过宏实现 Python 样式的列表推导式,适用于以下标准容器
Vec
HashMap
HashSet
BTreeMap
BTreeSet
还提供了一个用于生成器推导式的宏。
更多信息请参阅此处文档。
许可证
Apache 许可证第 2 版和 MIT 许可证的双许可。
lib.rs
:
类似于 Python 列表推导式的容器推导式宏。
此 crate 添加了向量、集合、映射和生成器推导式。它旨在补充 maplit,后者为相同的标准容器提供了宏字面量。
let v = vec![3, 2, 6, 9, 5];
let even_squares = vecc![x * x; for x in v.iter(); if x % 2 == 0];
assert_eq!(even_squares, vec![4, 36]);
宏名称与 maplit 的容器字面量宏名称相同,但在末尾有一个 c 表示 comprehension。还有一个额外的宏 iterc!()
用于创建延迟评估的生成器表达式。
列表推导式存在于许多语言和许多风格中。此 crate 使用与 Python 列表推导式相同的语法,因为它易于使用、可读且广受欢迎。如果您理解 Python 的列表推导式,那么您就理解了 mapcomp
的推导式。
Python 语法的一个微小差异是在子句之间有分号,这是 Rust 宏语言的一个限制。另一个不同之处在于,映射推导式使用 =>
符号来区分键和值,而不是像 Python 那样使用冒号。
可以无限次地嵌套 for var in 可迭代
子句,每个循环子句之后的条件 if conditional
是可选的。
let grid = vec![vec![-2, 5], vec![3, -7, 6], vec![4, 2]];
let v = vecc![x; for row in grid; if row.len() < 3; for x in row; if x > 0];
assert_eq!(v, vec![5, 4, 2]);