Zum Inhalt springen

Callbacks

Betrachten Sie die Implementierung einer register-Funktion, die einen Callback auf zwei Arten entgegennimmt:

fn register1(cb: fn(Event) -> ());
fn register2<F>(cb: F) where F: Fn(Event) -> ();

Welche Typsignatur erlaubt es register, die größte Vielfalt an Argumenten zu akzeptieren?

Closures mit Umgebungen können an register2 übergeben werden, während nur Top-Level-Funktionen (oder Closures ohne Umgebungen) an register1 übergeben werden können.