我该如何返回功能?

时间:2014-07-07 01:36:11

标签: rust

我尝试重新创建功能组合

fn compose<A, B, C>(f : |B| -> C,
                    g : |A| -> B)
                    ->  |A| -> C{
  |x| f(g(x))
}

但我得到了一生的错误。我读到闭包是基于堆栈的,但它不能解释为什么我会收到此错误。

let f3 = compose(f1,f2);

我不能将闭包移出目前的范围吗?

1 个答案:

答案 0 :(得分:4)

是的,Rust的当前闭包通过引用捕获,并将闭包的环境(即对捕获的变量的引用)放在堆栈上,通过引用引用它。因此,只要你有一个捕获外部变量的闭包(你正在捕获fg),它就被链接到创建它的堆栈帧。

C ++ 11风格的unboxed closures通过允许按值捕获值并允许直接存储环境(即没有强制引用)来解决这个问题。确切的语法尚未最终确定,但您所写的内容可能有效。