On Saturday, 22 February 2014 at 03:51:19 UTC, Jesse Phillips wrote:
On Thursday, 20 February 2014 at 19:34:17 UTC, w0rp wrote:
I suppose the next step after that would be to
support nested unpacking, but that would require a change in
syntax so it would be much more complicated.

You mean this?

void main() {
    import std.typecons : tuple;
    import std.range : repeat;
    foreach(k,v1, v2; tuple(1, tuple(2, 3)).repeat(4))
    {}
}

Yeah, that works.

Ah, I didn't realise you could decompose tuples that way.

I suppose this in Python...

l = [((1, 2), (3, 4, 5))]
for (x, y), (a, b, c) in l:
    print (x, y, a, b, c)

... kind of becomes this in D.

auto left = tuple(1, 2);
auto right = tuple(3, 4, 5);
auto both = tuple(left, right);
auto l = [both];

// identity map function to trick the array into being just a range.
foreach(x, y, a, b, c; l.map!(x => x)) {
    writeln(x, y, a, b, c);
}

Then static typing makes you not worry about which thing comes from which tuple.

Reply via email to