Avatar ·

Callbacks idiomáticos en Rust: cómo pasar correctamente funciones y closures

¡Hola, colegas! Empecé a estudiar Rust después de C++ y no puedo entender cómo hacer callbacks correctamente. En C++ simplemente pasaba std::function o un puntero a función. Aquí todo es más estricto con la propiedad y el tiempo de vida. Problema: quiero escribir un manejador de eventos simple. Tengo una estructura Button que debe llamar a una función personalizada al presionarlo. En C++ lo haría así: ```cpp struct Button { std::function onClick; void press() { if(onClick) onClick(); } }; ``` Intento reescribirlo en Rust: ```rust struct Button { callback: fn(), // pruebo con puntero a función } impl Button { fn press(&self) { (self.callback)(); } } ``` Esto funciona solo para funciones normales, pero no para closures que capturan variables. Si escribo: ```rust let mut count = 0; let button = Button { callback: || { count += 1; } // ¡error! el tipo no coincide }; ``` El compilador se queja: "expected fn item, found closure". He leído sobre Box