Avatar ·

Callbacks idiomatiques en Rust : comment passer une fonction et éviter le borrow checker ?

Bonjour à tous ! J'écris en Rust depuis environ un mois, je suis passé de JavaScript, et j'ai rencontré un problème avec l'implémentation des callbacks. En JS, j'avais l'habitude de simplement passer une fonction comme argument : `doSomething(callback)`. En Rust, j'essaie de faire la même chose, mais j'obtiens des erreurs du borrow checker. Voici mon code : ```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 } ``` Cela fonctionne, mais seulement pour les fonctions ordinaires. Si je veux passer une closure qui capture des variables de l'environnement, le compilateur se plaint : ```rust let multiplier = 3; let proc = Processor::new(|x| x * multiplier); // error[E0277]: expected a `fn` pointer, found closure ``` Comment organiser correctement