On Friday, 18 May 2012 at 10:47:11 UTC, Dario Schiavon wrote:
On Thursday, 17 May 2012 at 17:13:50 UTC, deadalnix wrote:
[...]

I think you show a real need here, but I don't really like your proposal. I'd advocate for recycling the comma operator for tuple building.

This would be very similar to your proposal as a result, but no need to introduce a new syntax.

As I see it, creating single-item tuples would still be difficult with the comma syntax, except by introducing syntaxes like (a,) or (a,void), which don't look very good. Sure, single-item tuples don't appear that useful at first, but let's assume you want to append a new item to the tuple: can you write anything better than tuple~(a,)? Python's solution is not very elegant in these cases.

Although, it just came to my mind, appending new items to tuples is quite easy with the actual rules for AliasTuples. Since AliasTuples can't have a hierarchy, they always unpack automatically. So the expression "tuple,a" would actually append the item "a" to the AliasTuple "tuple". The following works already in D:

import std.stdio;
import std.typetuple;

void main() {
  alias TypeTuple!(1, 2) a;
  alias TypeTuple!(a, 3) b;  // appends 3 to a
  writeln(b);  // prints "123"
}

Appending items to tuples actually covers 99% of my needs of single-item tuples in Python. Can anyone find other needs for single-item tuples? Or for empty tuples?


However, another point of my post was whether we really need Records (std.typecons.Tuple's), which take approximately the same role as traditional struct's after all, to allow returning multiple values from functions. Wouldn't AliasTuples take on the role as well?

Reply via email to