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.