Callbacks idiomáticos em Rust: como passar uma função e evitar o borrow checker?
Olá a todos! Estou escrevendo em Rust há cerca de um mês, vim do JavaScript, e tive um problema com a implementação de callbacks. Em JS, estou acostumado a simplesmente passar uma função como argumento: `doSomething(callback)`. Em Rust, estou tentando fazer o mesmo, mas recebo erros do borrow checker.
Aqui está meu 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
}
```
Isso funciona, mas apenas para funções comuns. Se eu quiser passar uma closure que captura variáveis do ambiente, o compilador reclama:
```rust
let multiplier = 3;
let proc = Processor::new(|x| x * multiplier);
// error[E0277]: expected a `fn` pointer, found closure
```
Como organizar