Fredderic Unpenstein píše v Pá 05. 02. 2010 v 23:57 +1100:
2010/1/23 Sam Liddicott <sam 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