#closures #语法 #Scala #lambda #macro #占位符语法 #λ

placeholder_closure

Scala 为 Rust 提供的占位符语法

1 个不稳定版本

0.1.0 2021 年 6 月 19 日

#13 in #scala

CC0 许可证

7KB

placeholder_closure

CI Crates.io Crates.io

Scala 为 Rust 提供的占位符语法。

use placeholder_closure::λ;

let xs = xs.into_iter().map(λ!($ + 1)).collect::<Vec<_>>();

fn dot<F: FnOnce(Y) -> Z, G: FnOnce(X) -> Y, X, Y, Z>(f: F, g: G) -> impl FnOnce(X) -> Z {
    λ!(move { f(g($)) })
}

用法

请参阅 Docs.rs 上的文档

许可证

许可协议为 CC0-1.0


lib.rs:

Scala 为 Rust 提供的占位符语法。

use placeholder_closure::λ;

let xs = xs.into_iter().map(λ!($ + 1)).collect::<Vec<_>>();

工作原理

λ!(或lambda!)宏将 0 个或多个 $ 字符替换为闭包参数。

let f = λ!($ + 1);

将会是

let f = |__0| __0 + 1;

构建 move 闭包

您还可以构建 move 闭包。

fn dot<F: FnOnce(Y) -> Z, G: FnOnce(X) -> Y, X, Y, Z>(f: F, g: G) -> impl FnOnce(X) -> Z {
    λ!(move { f(g($)) })
}

依赖关系

~1.5MB
~35K SLoC