Avatar ·

Callbacks idiomatiques en Rust : comment passer correctement des fonctions et des closures

Bonjour, collègues ! J'ai commencé à étudier Rust après C++ et je ne comprends pas comment faire correctement des callbacks. En C++, je passais simplement std::function ou un pointeur de fonction. Ici, tout est plus strict avec la possession et la durée de vie. Problème : je veux écrire un simple gestionnaire d'événements. Il y a une structure Button qui doit appeler une fonction utilisateur lors d'un clic. En C++, j'aurais fait comme ceci : ```cpp struct Button { std::function onClick; void press() { if(onClick) onClick(); } }; ``` J'essaie de réécrire en Rust : ```rust struct Button { callback: fn(), // j'essaie un pointeur de fonction } impl Button { fn press(&self) { (self.callback)(); } } ``` Cela fonctionne uniquement pour les fonctions normales, mais pas pour les closures qui capturent des variables. Si j'écris :