如何在 Rust 中将函数作为参数传递?
大家好!我刚开始学习 Rust,遇到了一个看似简单但找不到正确解决方案的问题。我想编写一个接受另一个函数作为参数的函数,以使代码更灵活。
以下是我尝试做的:
```rust
fn apply_twice(f: ???, x: i32) -> i32 {
f(f(x))
}
fn add_one(x: i32) -> i32 {
x + 1
}
fn main() {
let result = apply_twice(add_one, 5);
println!("{}", result); // 期望输出 7
}
```
我不明白应该为参数 `f` 指定什么类型。我尝试过 `fn(i32) -> i32`,但编译器报错。我还听说过闭包(closures)和 trait `Fn`、`FnMut`、`FnOnce`——但它们有什么区别?什么时候使用哪一个?如何传递捕获外部作用域变量的闭包?
请解释如何在 Rust 中正确传递函数和闭包。最好附带代码示例。提前感谢!
<<>>