On Friday, 15 May 2015 at 11:04:24 UTC, Per Nordlöw wrote:
I'm guessing the closest thing we can get in current D version is something like

    let(q{first, _, second},
        expression.findSplit(separator));

right?

Correction: I believe it must look like

     let!q{first, _, second}(expression.findSplit(separator));

or

     let!`first, _, second`(expression.findSplit(separator));


Is it possible to define a let that does what I want here?

If so, could someone, pleeeze, help me write out a stub for this?

I'm guessing something along the lines of

mixin template let(string vars, Ts...)
{
    import std.range: splitter;

// declare variables in current scope. TODO do we need a mixin here?
    foreach (i, var; vars.splitter(`, `))
    {
        mixin(Ts[i] ~ ` ` ~ var);
    }

    auto let(Tuple!Ts xs)
    {
        foreach (i, var; vars.splitter(`, `))
        {
            mixin(Ts[i] ~ ` = ` ~ xs[i]);
        }
    }
}

unittest
{
    let!q{first, _, second}(tuple(`first`, `_`, `second`));
}

but this fails in many ways.

Could someone, please help out here?

Reply via email to