rust - 我怎样才能返回一个函数?

标签 rust

我尝试重新创建功能组合

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

但是我收到了终身错误。我读到闭包是基于堆栈的,但它没有解释为什么我会收到此错误。

let f3 = compose(f1,f2);

我不能将闭包移出其当前范围吗?

最佳答案

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

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

关于rust - 我怎样才能返回一个函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24601969/

相关文章:

rust - 使用 map_keys 对扩展迭代器

rust - 如何为我不拥有的类型实现 serde 并让它支持复合/wrapper/collection 类型

generics - 泛化两个结构

rust - 如何将创建包含具有生命周期的 Cell 的结构的函数传递给另一个函数?

rust - 绑定(bind)函数参数和传递绑定(bind)函数的惯用方式

rust - 如何提高一个数的幂?

rust - 将数组传递给函数 : array must have 'Sized' type

rust - 为什么在闭包中调用函数与在 Rust 中直接调用函数时生命周期不同?

string - Rust 的 `String` 和 `str` 有什么区别?

rust - Rust的确切自动引用规则是什么?