我尝试重新创建功能组合
fn compose<A, B, C>(f : |B| -> C,
g : |A| -> B)
-> |A| -> C{
|x| f(g(x))
}
但是我收到了终身错误。我读到闭包是基于堆栈的,但它没有解释为什么我会收到此错误。
let f3 = compose(f1,f2);
我不能将闭包移出其当前范围吗?
最佳答案
是的,Rust 当前的闭包通过引用捕获,并将闭包的环境(即对捕获变量的引用)放在堆栈上,通过引用来引用它。因此,任何时候你有一个捕获外部变量的闭包(你正在捕获f
和g
),它就会链接到创建它的堆栈帧。
C++11 风格 unboxed closures通过允许按值捕获值并允许直接存储环境(即没有强制引用)来解决这个问题。确切的语法尚未最终确定,但您编写的内容可能是有效的。
关于rust - 我怎样才能返回一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24601969/