delegate confusion

bitwise via Digitalmars-d digitalmars-d at puremagic.com
Fri Aug 4 11:34:20 PDT 2017


On Friday, 4 August 2017 at 17:27:52 UTC, Timon Gehr wrote:
> On 04.08.2017 18:57, bitwise wrote:
[...]

> 3) heap allocate a chunk of space for each captured scope (as 
> in lisp and C#).
>
> The way to go is 3). 1) is bad, because it completely prevents 
> closures from being escaped, 2) is bad because it does not 
> allow sharing of closure memory.

Makes sense.

>> When I look at the output I get from the code above though, it 
>> seems like neither of these things were done, and that someone 
>> has gone way out of their way to implement some very strange 
>> behavior.
>> ...
>
> Absolutely not. The current behavior was quite straightforward 
> to implement, but it is wrong. Bugs often lead to strange 
> behavior. This does not imply that such bugs are intentional.

In hindsight, I would have to agree that the current approach may 
be a little _too_ straight forward ;)

[...]

> You can work around the bug like this:
>
> foreach(i;0..5)(){
>     int j=i;
>     funs~=(){ writeln(j); };
> }()

Thanks for this - most workarounds I came across this morning 
were pretty bloated.



More information about the Digitalmars-d mailing list