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. 

Perhaps some [ attributes ] to the closure could spcify which variables are to 
be frozen static, or perhaps atributes appled at varable use to signify use of 
the static value

In any case vala can recognize that a closure is using a loop variable to issue 
a warning.

Sam

-----Original Message-----
From: JürgBilleter <[email protected]>
Sent: 20 January 2010 08:28
To: Nor Jaidi Tuah <[email protected]>
Cc: [email protected]
Subject: Re: [Vala] for loop and closure (bug or big gotcha?)

On Wed, 2010-01-20 at 14:00 +0800, Nor Jaidi Tuah wrote:
> Given this:
> 
> for (int i=0; i < 10; i++) {
>     button[i].clicked.connect ((s) => {stdout.printf ("%d\n", i);});
> }
> 
> all the buttons, when clicked, outputs 10.
> i.e., the variable i is treated as non-local and shared
> by all those closures.
> 
> Is this the correct semantic?

Yes.

> If this is up for debate I would say that this is
> a wrong semantic. Different iteration of the for loop
> should use "different" i.

The scope of the variable `i` covers the whole `for` statement, not just
a single loop iteration (otherwise i++ at the end of each iteration
wouldn't make any sense). While it's true that this may cause mistakes,
we can't change this without breaking consistency. foreach loops should
be more convenient in that regard.

Jürg

_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

_______________________________________________
Vala-list mailing list
[email protected]
http://mail.gnome.org/mailman/listinfo/vala-list

Reply via email to