Fredderic Unpenstein píše v Pá 05. 02. 2010 v 23:57 +1100:
> 2010/1/23 Sam Liddicott <s...@liddicott.com>:
> > I used a language called charamel for controlling 3d figurs. It's closures 
> > supported
> > variables in 2 ways.
> >
> > Like valàa reference to the instantaneous value of the variable, and fixing 
> > it's value
> > (making a copy) at the time the closure was made.
> 
> How WOULD you do that in present Vala...?  That seems like an awfully
> obvious thing you might want to do, to be so difficult.
> 
> The only way to do it that I can think of, in the example above, would
> be attach the current value of i to the button as user data.  Seems
> awfully convoluted, and not always particularly practical.
> 

It is awfully simple. You don't need Vala to do it.

void main () {
        for (int i = 0; i < 10; ++i) {
                int t = i;
                Idle.add (() => { print ("%d", t); return false; });
        }
        
        new MainLoop ().run ();
}

TADAAAAA! You have the value in that particular iteration fixed.
Does anyone need something more sophisticated? 

So, why does this work?
i is defined before the loop and destroyed after it's exited.
i is the same variable in all iterations.
t is defined inside the iteration and destroyed when the iteration ends.
t is a different variable in every iteration.

You don't need anything from Vala. The way it works is entirely logical.

Attachment: signature.asc
Description: Toto je digitálně podepsaná část zprávy

_______________________________________________
Vala-list mailing list
Vala-list@gnome.org
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to