On Tue, 04 Jun 2013 23:48:32 +0200
Timon Gehr <[email protected]> wrote:

> On 06/04/2013 11:38 PM, Nick Sabalausky wrote:
> > On Tue, 04 Jun 2013 23:24:51 +0200
> > Timon Gehr <[email protected]> wrote:
> >>
> >> 'a' refers to a different location for every loop iteration. This
> >> is a language change in 2.063.
> >>
> >
> > foreach(a;0..5)
> >      writeln(&a);
> >
> > For me, that prints the same address five times in both 2.062 and
> > 2.063.
> 
> It does not matter. The lifetimes of the different a's do not overlap.
> 

Ok, I see what you mean now: Closures are expected to capture the
current scope, not just the current function's scope (which wouldn't
have been right anyway as it would have prevented access to the loop
variable).

Ie:

    int delegate() dg;

    {
        int a = 2;
        dg = () => a;
    }

    int a = 100;
    writeln(dg());

That prints 2, as expected.

I hadn't thought of that. With that in mind, then yes, the OP's example
should print 0, 1, 2, 3, etc, not all 5's.

Reply via email to