Callbacks idiomáticos en Rust: cómo pasar una función y evitar el borrow checker?
¡Hola a todos! Llevo aproximadamente un mes escribiendo en Rust, vengo de JavaScript, y tengo un problema con la implementación de callbacks. En JS estoy acostumbrado a simplemente pasar una función como argumento: `doSomething(callback)`. En Rust intento hacer lo mismo, pero recibo errores del borrow checker.
Aquí está mi código:
```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
}
```
Esto funciona, pero solo para funciones normales. Si quiero pasar un closure que capture variables del entorno, el compilador se queja:
```rust
let multiplier = 3;
let proc = Processor::new(|x| x * multiplier);
// error[E0277]: expected a `fn` pointer, found closure
```
¿Cómo organizar correctamente...