Rust中惯用的回调(callbacks):如何传递函数并避免借用检查器?
大家好!我写Rust大约一个月了,从JavaScript转过来,在实现回调时遇到了问题。在JS中,我习惯直接传递函数作为参数:`doSomething(callback)`。在Rust中,我尝试做同样的事情,但遇到了借用检查器的错误。
这是我的代码:
```rust
struct Processor {
callback: fn(i32) -> i32,
}
impl Processor {
fn new(cb: fn(i32) -> i32) -> Self {
Processor { callback: cb }
}
fn process(&self, x: i32) -> i32 {
(self.callback)(x)
}
}
fn double(x: i32) -> i32 { x * 2 }
fn main() {
let proc = Processor::new(double);
println!("{}", proc.process(5)); // 10
}
```
这可以工作,但仅适用于普通函数。如果我想传递一个捕获环境变量的闭包(closure),编译器会报错:
```rust
let multiplier = 3;
let proc = Processor::new(|x| x * multiplier);
// error[E0277]: expected a `fn` pointer, found closure
```
如何正确组织