Rust 该功能是否可能导致生锈?

Rust 该功能是否可能导致生锈?,rust,Rust,一种函数,它将函数指针作为参数,并返回调用原始函数的函数指针,而忽略额外的参数 在概念上与以下内容类似,忽略它不编译: fn foo(f: fn(u32) -> u32) -> fn(u32, u32) -> u32 { unimplemented!() } 不幸的是,这是不可能的。函数没有状态,因此每次调用foo,都必须生成一个全新的函数,在内部调用f,这显然是不可能的 如果您愿意放宽返回类型,可以返回impl-Fn(u32,u32)->u32: fn foo(f:

一种函数,它将函数指针作为参数,并返回调用原始函数的函数指针,而忽略额外的参数

在概念上与以下内容类似,忽略它不编译:

fn foo(f: fn(u32) -> u32) -> fn(u32, u32) -> u32 {
    unimplemented!()
}

不幸的是,这是不可能的。函数没有状态,因此每次调用
foo
,都必须生成一个全新的函数,在内部调用
f
,这显然是不可能的

如果您愿意放宽返回类型,可以返回
impl-Fn(u32,u32)->u32

fn foo(f: fn(u32) -> u32) -> fn(u32, u32) -> u32 {
    |x, _| f(x)
}

无论返回什么,都必须调用
f
,因此它必须记住必须调用
f
。函数不能记住任何东西,只有闭包可以。
fn foo(f: fn(u32) -> u32) -> impl Fn(u32, u32) -> u32 {
    move |x, _| f(x)
}

fn main() {
    let new_f = foo(|x| x);
    assert_eq!(new_f(1, 2), 1);
}