On Sunday, 4 May 2014 at 10:04:26 UTC, Gary Willoughby wrote:
In the following snippet is the line marked WOAH legal? The compiler doesn't complain about the trailing comma in the constructor arguments.

import std.stdio;

class Foo
{
        public this(string foo)
        {
        }
}

void main(string[] args)
{
        auto foo = new Foo("bar", ); // <-- WOAH
}

Yes. As a rule of thumb, a single trailing comma is *always* legal. It allows for easier and uniform syntax for calls with lots of arguments:

new Foo(
  "bar1",
  "bar2",
  "bar3",
  "bar4",
);

This works for mostly anything: both calls and function declaration:

this(
    string arg1,
    string arg2,
    string arg3,
    string arg4,
)
{
   ...
}

It also works for arrays:
auto arr1= [
    1,
    2,
    3,
    4,
];

Or enums:
enum Letters
{
    A,
    B,
    C,
    D,
}

The advantage in all the above means no special case if you want to add, swap or comment a certain argument: They are all "equal" in terms of separator comma.

Finally, it makes mixins/generated code easier, since you don't have to worry about the "last argument" special case (though if you use "range formating": "%(%s,%)", it shouldn't matter).

--------

So long story short, yes, it is legal. And convenient. I've personally adopted it, and use it any time I list arguments vertically.

Reply via email to