Fredderic Unpenstein píše v Pá 05. 02. 2010 v 23:57 +1100: > 2010/1/23 Sam Liddicott <[email protected]>: > > 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.
signature.asc
Description: Toto je digitálně podepsaná část zprávy
_______________________________________________ Vala-list mailing list [email protected] http://mail.gnome.org/mailman/listinfo/vala-list
