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 :