4 个版本 (2 个重大变更)
使用旧的 Rust 2015
0.3.0 | 2017 年 10 月 20 日 |
---|---|
0.2.0 | 2017 年 7 月 9 日 |
0.1.1 | 2017 年 7 月 7 日 |
0.1.0 | 2017 年 6 月 26 日 |
#2198 在 Rust 模式 中
每月 100 次下载
17KB
208 行
README
这是一个实现类似于 Scala 的 comprehension 的 Rust 宏。
示例
let l = map_for!{
x <- 0..10;
y = x/2;
if (y%2) == 0;
z <- 0..1;
=> y+z }
将被扩展为
let l = (0..10).map (move |x| { let y = x / 2; (x, y) })
.filter (|params| { let (x, y) = *params; (y%2) == 0 })
.flat_map (move |params| {
let (x, y) = params;
(0..1).map (move |z| { y + z }) });
注意,由于 Rust 没有Scala的局部函数的等价物,comprehension 无法执行完整的模式绑定,只能用于单个绑定(即 v <- …
)或元组绑定(即 (x, y) <- …
)。
与 comp 相比,map_for
更为通用:comp
有针对 Option
、Iterator
和 Result
的特殊符号和代码,而 map_for
可以与任何具有 map
、flat_map
和 filter
方法的类型一起工作,或者可以将它们扩展为 map_for.FlatMap
和 map_for.Filter
对 Option
的处理,而 Option
只有一个 map
。
与 mdo 相比,map_for
采用更简单、更直接的方法,因为大多数单子类型已经定义了 map
、flat_map
和 filter
方法,而 mdo
需要重新实现特定的 API。