JM <interfl...@gmx.net> writes: > If I do the same thing with an Idle, the behavior is significantly > different, as the block data is not destroyed as soon as the run() > function is left. Why is that? > > Well working example: > > class HHH : Object { > public void run() { > string test = "test"; > Idle.add(() => { print("in idle : %s \n", test); return > false;});
if you look into glib-2.0.vapi Idle.add is declared as: public static uint add (owned SourceFunc function, [CCode (pos = 0.1)] int priority = Priority.DEFAULT_IDLE); so the add() is declared to own the function past to it, so the closure data will be kept alive > } > > public static MainLoop loop; > > public static int main() { > loop = new MainLoop(null, false); > var h = new HHH(); > h.run(); > h.run(); > h.run(); > h.run(); > loop.run(); > return 0; > } > } > > // valac closuretest.vala _______________________________________________ Vala-list mailing list Vala-list@gnome.org http://mail.gnome.org/mailman/listinfo/vala-list