On Saturday, 25 June 2016 at 09:07:19 UTC, Lodovico Giaretta wrote:

Instead of passing functions to match!, pass pairs of arguments, like this:

    match!(T,
        int, writeln("Matched int"),
        is(T : SomeObject), writeln("Derives from SomeObject");
    );

Now, in the implementation, foreach pair of arguments, if the first member is a type that matches your target, perform that branch; otherwise, if the first member is a boolean value, and it is true, perform the branch.

Of course I meant:

     match!(T,
         int, () {writeln("Matched int");},
is(T : SomeObject), () {writeln("Derives from SomeObject");}
     );

You could probably even match on the actual value (instead of its type) and pass it (correctly casted) to the functions:

     match!(t,
         int, (int t) {writeln("Matched int ", t);},
is(T : SomeObject), (SomeObject t) {writeln(t, " derives from SomeObject");}
     );

I don't have time to implement it now, but I think it's not too difficult.

Reply via email to