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

Reply via email to