On 2013-03-24 03:05, timotheecour wrote:
I updated
https://github.com/timotheecour/dtools/blob/master/dtools/util/functional.d
to incorporate Jacob Carlborg's idea (thanks for the working+clean code!
let me know if attribution is ok)

Absolutely.

If 'fun(z:3,x:4)' syntax later comes to D, it'd be trivial to write a
tool that automatically changes the named!fun syntax in people's /
phobos' source code to use the new cleaner syntax.

main benefit IMO: prevent boilerplate code like this:

struct Options{int x; int y=1; int z=2;}
auto fun(Options options);

Options options;
options.x=4;
options.z=3;
auto a=fun(options);
(or similar with param expansion: auto
a=fun(options.x,options.y,options.z))

What would be nice is to be able to do like this:

struct Options{int x; int y=1; int z=2;}
auto fun(Options options);

fun(y: 2, z: 45, x: 4);

Then add opDispatch to Options to soak up any varialble not found in Options:

struct Options
{
    int x;
    int y = 1;
    int z = 2;

    private Variant[string] values;

    void opDispatch (string name, T) (T value)
    {
        values[name] = Variant(value);
    }
)

fun(y: 2, foo: "asd", bar: 4.0, z: 45, x: 4);

x, y, z are mapped to the variables in Options. foo and bar are handled by opDispatch.

See my proposal for anonymous structs:

http://forum.dlang.org/thread/kfbnuc$1cro$1...@digitalmars.com

--
/Jacob Carlborg

Reply via email to