On Saturday, 9 May 2015 at 17:16:58 UTC, Russel Winder wrote:
Python has tuple assignment so you see things like:

        previous, current = current, previous + current

especially if you are doing silly things like calculating Fibonacci
Sequence values. Translating this to D, you end up with:

        TypeTuple!(current, next) = tuple(next , current +next);

This works right now and is quite aesthetically pleasing:

    tuple(current, next) = tuple(next , current +next);

Note, however, that this is not a tuple assignment. It is assignment of a misleadingly-named anonymous struct type that is implemented in the standard library.

This is an actual tuple assignment as supported by the compiler:

    a.tupleof = b.tupleof;

I think it should work for any two structs as long their fields are public and individually assignment-compatible. I believe it is as efficient as individual assignments on all D implementations.

A lot of people seem to want better sugar for tuple or tuple-like things in D and do not consider std.typecons sufficient (or at least find the names it uses confusing). Such a feature would work very nicely with D's auto types, return and lambda argument type inference, etc. See LINQ.

Reply via email to