Cannot dup an associative array but why?
Jean-Louis Leroy via Digitalmars-d-learn
digitalmars-d-learn at puremagic.com
Tue Jul 11 12:35:09 PDT 2017
On Tuesday, 11 July 2017 at 17:20:33 UTC, Ali Çehreli wrote:
> That's some serious code you've written there and you must be
> happy that 'virtual' is not a keyword in D. ;)
Thanks. Haha I would have used virtual_ like I did in C++ ;-)
> Maybe others can come up with ideas on a better syntax.
When it is presentable (I'm almost there) I plan to ask a review.
I would welcome suggestions about the syntax - which is not too
bad as it is now, I have been happily surprised with what is
feasible. It even supports overloading methods.
The thing that annoys me most is having to pass a string to
'method'. And attributes are not allowed on arguments. I wish I
would make something like this work:
mixin method!(fight, string, virtual!Character,
virtual!Creature, virtual!Device);
// or:
mixin method!(fight, string, @virtual Character, @virtual
Creature, @virtual Device);
// even better
mixin method!(fight, function string(@virtual Character,
@virtual Creature, @virtual Device));
// and if there is a catch-all implementation:
mixin method!(fight, function string(@virtual Character,
@virtual Creature, @virtual Device) {
// body
}
I tried to get inspiration from Yes and No, considered using
opDispatch, but I haven't found a way yet.
> Just to get the conversation going and without thinking it
> through, how about something like the following?
>
> struct Virtual(Args...) {
> // ...
> }
>
> @Virtual("t", "d", "w")
> string fight(Character t, Dragon d, Hands w) {
> return "you just killed a dragon with your bare hands.
> Incredible isn't it?";
> }
The 'virtual' qualifier applies to the arguments in the method
declaration, not the specializations. Also, I prefer to keep the
qualifiers stuck to the argument. It's clearer. Interesting idea
though.
> Then, something like the following which would parse the module
> to do its magic:
>
> mixin ProcessMethods();
Very interesting. I don't like the repetition of 'mixin' in front
of each 'method' and 'implementation'.
Hmmm...if ProcessMethods() can find @Virtual(...) functions can't
it find functions that have virtual! parameters?
More information about the Digitalmars-d-learn
mailing list