Avatar ·

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 ``` 如何正确组织