Avatar ·

Idiomatische Callbacks in Rust: Wie man Funktionen und Closures richtig übergibt

Hallo Kollegen! Ich habe angefangen, Rust nach C++ zu lernen, und verstehe nicht, wie man Callbacks richtig macht. In C++ habe ich einfach std::function oder einen Funktionszeiger übergeben. Hier ist alles strenger mit Besitz und Lebenszeit. Problem: Ich möchte einen einfachen Event-Handler schreiben. Es gibt eine Struct Button, die beim Drücken eine benutzerdefinierte Funktion aufrufen soll. In C++ würde ich das so machen: ```cpp struct Button { std::function onClick; void press() { if(onClick) onClick(); } }; ``` Ich versuche, das in Rust zu übersetzen: ```rust struct Button { callback: fn(), // ich probiere einen Funktionszeiger } impl Button { fn press(&self) { (self.callback)(); } } ``` Das funktioniert nur für normale Funktionen, aber nicht für Closures, die Variablen einfangen. Wenn ich schreibe: ```rust let mut count = 0; let button = Button { callback: || { count += 1; } // Fehler! Typ stimmt nicht }; ``` Der Compiler meckert: "expected fn item, found closure". Ich habe über Box