Struct initializers as expressions

Jacob Carlborg via Digitalmars-d-learn digitalmars-d-learn at puremagic.com
Fri Dec 4 06:07:01 PST 2015


On 2015-12-04 11:42, Marc Sch├╝tz wrote:

> I'd support that, too.
>
> I suggest to make the struct name optional:
>
>      struct S { int a, b; }
>      struct T { string a, b; }
>      void foo(S s);
>      void foo(T t);
>
>      foo({b: 1, a: 2});  // foo(S(2, 1));
>      foo({a: "bla"});    // foo(T("bla", null));
>
> Then we can add some syntax sugar to leave out the braces, too:
>
>      void bar(int a, T t)
>      bar(42, a: "bla", b: "xyz");
>
> This effectively gives us strongly typed named arguments, without making
> the names part of the function signature, which Walter objected to the
> last time something like this was proposed.

I've been thinking along the same lines as well and would really like to 
see that feature. Wondering if it could work with opDispatch as well to 
swallow unrecognized fields.

But I do see a problem, which I'm guessing Walter would point out as 
well. It might/will complicate the overloading rules. What if "a" and 
"b" in T would be integers instead. I think that would be ambiguous.

-- 
/Jacob Carlborg


More information about the Digitalmars-d-learn mailing list