あーっと例が悪かったです。


class test
{
double delegate() a;
void b(lazy double arg)
{
a = {return arg();};
}
}
というクラス作っといて
test[] t;
double f = 1.;

for(int i=0;i<t.length;i++)
{
t[i].b(f + i);
} //この時点でi=t.lengthになる

みたいにして
のちのち

for(int i=0;i<t.length;i++) //先のiとは別物
{
t[i].a();
}

と書くと、iが遅延評価されて、
t[i].a() == 1.+t.length になってしまいます。
そこを、t[i].a() == 1. + i
という形にしたいのです(つまりfは遅延評価されるが、iはその場で値にされ代入)