DIP 88: Simple form of named parameters
Bastiaan Veelo
Bastiaan at Veelo.net
Wed Oct 25 21:19:48 UTC 2017
On Friday, 27 May 2016 at 18:26:07 UTC, Vladimir Panteleev wrote:
> https://github.com/CyberShadow/ae/blob/master/utils/meta/args.d
>
> :D
Nice work! Is it intentional to require default parameters? I
think you can change lines 34-36:
> foreach (i, arg; ParameterDefaults!fun)
> static if (i >= posArgs.length)
> args[i] = ParameterDefaults!fun[i];
into
> foreach (i, arg; ParameterDefaults!fun)
> static if (i >= posArgs.length) {
> static if (is(arg==void))
> args[i] = Parameters!fun[i].init;
> else
> args[i] = arg;
> }
That makes this work:
> import ae.utils.meta.args;
>
> void fun(int one, int two, double three, string four)
> {
> import std.stdio;
> writeln("one=", one, "; two=", two, "; three=", three, ";
> four=", four);
> }
>
> void main(string[] a)
> {
> args!(fun, four=>"4", two=>2, one=>a.length, three=>3.0);
> }
By the way your unit tests don't really test that named arguments
can be given in arbitrary order (although they can) as summation
is communitative.
Bastiaan.
More information about the Digitalmars-d
mailing list