Daniel wrote:
int delegate()[] funcs;
funcs.length = 3;
foreach(i, ref f; funcs)
{
f = int() { return i; }
}
foreach(f; funcs)
{
writeln(f());
}
First, there are syntax errors in your example. It should be
f = delegate int() { return i; };
Second, this works in D2:
foreach(i, ref f; funcs)
{
void blah() {
auto j = i;
f = delegate int() { return j; };
}
blah();
}
But this doesn't, outputs 2, 2, 2:
foreach(i, ref f; funcs)
{
auto j = i;
f = delegate int() { return j; };
}
And this crashes:
foreach(i, ref f; funcs)
{
({
auto j = i;
f = delegate int() { return j; };
})();
}
I think these 3 variants should be equivalent.