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