4 个版本 (稳定)
1.0.2 | 2020 年 5 月 31 日 |
---|---|
0.1.0 | 2020 年 5 月 31 日 |
#2196 在 Rust 模式
每月 38 次下载
在 forward_goto 中使用
8KB
97 行
fix_fn
此库通过提供一个宏 fix_fn
来启用递归闭包的创建。其功能类似于 Y 组合子。递归闭包可以有任意数量的参数,并且可以捕获变量。
use fix_fn::fix_fn;
let fib = fix_fn!(|fib, i: u32| -> u32 {
if i <= 1 {
i
} else {
// fib will call the closure recursively
fib(i - 1) + fib(i - 2)
}
});
assert_eq!(fib(7), 13);
lib.rs
:
此库通过提供一个宏 fix_fn
来启用递归闭包的创建。其功能类似于 Y 组合子。递归闭包可以有任意数量的参数,并且可以捕获变量。
use fix_fn::fix_fn;
let fib = fix_fn!(|fib, i: u32| -> u32 {
if i <= 1 {
i
} else {
// fib will call the closure recursively
fib(i - 1) + fib(i - 2)
}
});
assert_eq!(fib(7), 13);
生成的代码并非完全抽象,因为它使用一个 dyn 特性(没有任何装箱)来克服 Rust 的递归类型限制。然而,在大多数情况下,优化器应该能够消除任何动态分发。
遗憾的是,不支持可变递归闭包。