fn foo(f: fn(u32) -> u32) -> fn(u32, u32) -> u32 {
unimplemented!()
}
一个以函数指针作为参数的函数,返回一个调用原始函数且忽略额外参数的函数指针。
以下是类似于该概念的内容,但请忽略它不能编译的事实:
fn foo(f: fn(u32) -> u32) -> fn(u32, u32) -> u32 {
|x, _| f(x)
}
fn foo(f: fn(u32) -> u32) -> fn(u32, u32) -> u32 {
unimplemented!()
}
一个以函数指针作为参数的函数,返回一个调用原始函数且忽略额外参数的函数指针。
以下是类似于该概念的内容,但请忽略它不能编译的事实:
fn foo(f: fn(u32) -> u32) -> fn(u32, u32) -> u32 {
|x, _| f(x)
}
foo
时,都必须生成一个全新的函数,该函数内部调用 f
,显然这是不可能的。
如果您愿意放宽返回类型,可以返回一个 impl Fn(u32, u32) -> u32
: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);
}
f
,因此它必须记住要调用的f
。函数不能记住任何东西,只有闭包可以。 - n. m.