On Saturday, 8 March 2014 at 02:15:19 UTC, Adam D. Ruppe wrote:
I guess the whole yield thing can be kinda nice, I'm just not sure it is that big of a win given its other limitations compared to full ranges.

I slapped this together to see if we can do it with a mixin template:

http://arsdnet.net/dcode/next.d

struct ShortRange {
        int next() {
                switch(callNumber) {
                        case 0: return 50;
                        case 1: return 60;
                        case 2: return 70;
                        case 3: return finished();
                        default: assert(0);
                }
        }

        mixin MakeShortRange!();
}

Wordier than
yield ShortRange() { yield 50; yield 60; yield 70; }

but the same idea. (In fact, i'm sure the whole yield thing should pretty much just rewrite into something like this anyway).

My hypothetical from the previous post would be written:


struct ShortRange {
        Result result;
        this(string s) {
            result = c_query(s);
        }
        Row next() {
             if(!HasRow(result))
                 return finished();
             return GetNextRow(result);
        }

        mixin MakeShortRange!();
}

Which is a bit shorter and perhaps nicer to use than the long form range.

Reply via email to