Generics 如何描述返回泛型类型的currying函数的生存期?

Generics 如何描述返回泛型类型的currying函数的生存期?,generics,functional-programming,rust,lifetime,currying,Generics,Functional Programming,Rust,Lifetime,Currying,我试图写一个函数,将两个变量的函数转换成一个变量的函数值函数 当涉及的类型都很简单时,就没有问题了: fn curry1(f: fn(i32, i32) -> i32) -> Box<Fn(i32) -> Box<Fn(i32) -> i32>> { Box::new(move |x| Box::new(move |y| f(x, y))) } 如何正确描述和注释相关的生命周期?您使用的是哪个版本的编译器?最新的稳定版本似乎为这种情况提供

我试图写一个函数,将两个变量的函数转换成一个变量的函数值函数

当涉及的类型都很简单时,就没有问题了:

fn curry1(f: fn(i32, i32) -> i32) -> Box<Fn(i32) -> Box<Fn(i32) -> i32>> {
    Box::new(move |x| Box::new(move |y| f(x, y)))
}

如何正确描述和注释相关的生命周期?

您使用的是哪个版本的编译器?最新的稳定版本似乎为这种情况提供了更有用的错误消息。下面是(您可能希望将其包括在问题中)。操场上活动的编译器版本提供了一条更有用的错误消息:
考虑添加显式的生存期界限Z:'static'…以便closure@src/main.rs:6:32:6:48 f:fn(i32,i32)->Z,x:i32]'将满足其所需的生存期限制
。因此我将
fn curry2(…
更改为
fncurry2@fmg你想把这方面的细节作为问题的答案吗?这似乎是很多人将来想知道的事情(或者至少,我可能会)。
fn curry2<Z>(f: fn(i32, i32) -> Z) -> Box<Fn(i32) -> Box<Fn(i32) -> Z>> {
    Box::new(move |x| Box::new(move |y| f(x, y)))
}