On Sun, 12 Dec 2010 14:47:04 -0500, spir <denis.s...@gmail.com> wrote:

Hello,

Had a nice time figuring out how to let opApply allow index iteration like:
    foreach (i, x ; collection) {}
Finally managed to do it adding 'i' everywhere:

struct S1 {
    private int[] elements = [];
    int opApply (int delegate (ref uint, ref int) block) {
        foreach (uint i, int n ; this.elements)
            block(i, n);
        return 0;
    }
}

Is this the intended idiom?
Now, I'm trying to make this work with ranges instead (input range only as of now). Seems i'm not smart enough to guess it alone...

It's not possible. There is no mechanism for foreach to use an 'index' field from the range.

What's wrong with using opApply? You should be able to define both range primitives and opApply and opApply will be used when foreach is used, and the range primitives will be used by things like std.algorithm.

-Steve

Reply via email to