While working on a solution for Alfred Newman's thread, I came up with the following interim solution, which compiled but failed:

auto parse(R, S)(R range, S separators) {
    import std.algorithm : splitter, filter, canFind;
    import std.range : empty;

    static bool pred(E, S)(E e, S s) {
        return s.canFind(e);
    }

    return range.splitter!pred(separators).filter!(token => !token.empty);
}

unittest {
    import std.algorithm : equal;
    import std.string : format;
    auto parsed = parse("_My   input.string", " _,.");
assert(parsed.equal([ "My", "input", "string" ]), format("%s", parsed));
}

void main() {
}

The unit test fails and prints

["put", "ing"]

not the expected

["My", "input", "string"].

How is that happening? Am I unintentionally hitting a weird overload of splitter?

Ali
  • splitter trouble Ali Çehreli via Digitalmars-d-learn

Reply via email to