我现在正在学习 Rust,但似乎无法将闭包指定为函数参数。这是我的代码:
fn foo(a: i32, f: |i32| -> i32) -> i32 {
f(a)
}
fn main() {
let bar = foo(5, |x| { x + 1 });
println!("{}", bar);
}
我收到以下错误:
foo.rs:1:19: 1:20 error: expected type, found `|`
foo.rs:1 fn foo(a: i32, f: |i32| -> i32) -> i32 {
好的,所以它不喜欢闭包语法。这有点烦人,因为现在我必须写成这样:
fn foo(a: i32, f: Box<Fn(i32) -> i32>) -> i32 {
f(a)
}
fn main() {
let bar = foo(5, Box::new(|x| { x + 1 }));
println!("{}", bar);
}
那么发生了什么?我已经在几个不同的地方阅读到第一个示例是有效的,所以这个“闭包类型参数”语法被删除了吗,还是我做错了什么?
Fn
现在是FnMut
,而FnShare
现在是Fn
)。 - Francis Gagné