On Tue, 04 Jun 2013 23:24:51 +0200 Timon Gehr <timon.g...@gmx.ch> wrote:
> On 06/04/2013 11:03 PM, Nick Sabalausky wrote: > > ... > > > > So when you put the delegate creation in a loop: > > > > foreach(a; iota(0..6)) > > dg = () => a; > > > > It *is* expected that you're *not* sticking 0, 1, 2, 3, etc inside > > the delegate. That's because you're not evaluating "a" *at all* > > here, you're just crerates a delegate that *refers* to "a" itself. > > You're just creating the exact same delegate five times. In other > > words: > > > > You're just saying: > > Store the following set of instructions into 'dg': "Read the value > > of 'a' and then return it." > > > > You're *not* saying: > > Read the value of 'a' and *then* create a delegate that returns that > > value. > > > > > > '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. I would argue that's as it should be.