On Saturday, 5 August 2017 at 18:54:22 UTC, ikod wrote:
On Saturday, 5 August 2017 at 18:45:34 UTC, Simon Bürger wrote:
On Saturday, 5 August 2017 at 18:22:38 UTC, Stefan Koch wrote:
[...]


No, sometimes I want i to be the value it has at the time the delegate was defined. My actual usecase was more like this:

        void delegate()[3] dgs;
        for(int i = 0; i < 3; ++i)
                dgs[i] = (){writefln("%s", i); };


And I want three different delegates, not three times the same. I tried the following:

        void delegate()[3] dgs;
        for(int i = 0; i < 3; ++i)
        {
                int j = i;
                dgs[i] = (){writefln("%s", j); };
        }

I thought that 'j' should be considered a new variable each time around, but sadly it doesn't work.

Maybe std.functional.partial can help you.

Thanks. But std.functional.partial takes the fixed arguments as template parameters, so they must be known at compile-time. Anyway, I solved my problem already a while ago by replacing delegates with custom structures which overload the call-operator. I opened this thread just out of curiosity. Takes a couple lines more but works fine.

Reply via email to