Pure delegate not quite pure?
via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Sun Jun 28 03:12:45 PDT 2015
On Sunday, 28 June 2015 at 09:19:16 UTC, Tofu Ninja wrote:
> module main;
> import std.stdio;
> void main(string[] args)
> {
> auto d = foo();
> writeln(d()); // prints 25
> }
>
> auto foo()
> {
> int x = 4;
> pure int delegate() d = delegate()
> {
> return x*x;
> };
> writeln(d()); // prints 16
> x = 5;
> writeln(d()); // prints 25
> return d;
> }
>
> I can see that after foo returns, then d will truly be pure as
> x will no longer be modifiable, but just before that, it seems
> d is not actually pure. Is this the intended behavior?
Just guessing: The context is treated as an implicit parameter of
`d` (analogous to `this` for a struct/class). Access to `x`
counts a access through a parameter and therefore doesn't violate
purity.
More information about the Digitalmars-d-learn
mailing list