On Mar 20, 10:56 am, Konrad Hinsen <konrad.hin...@laposte.net> wrote:
> Providing a :default implementation for multimethods is a very common
> and useful technique, but it is really useful only for multimethods
> that dispatch on a single argument.
I disagree about that. No dispatch value, composite or not, is still a
valid concept.
> What I am looking for is an
> equivalent technique for multiple-argument dispatch.
>
> Suppose you have a multimethod + of two arguments, and you want to
> dispatch on both of them:
>
> (defmulti + (fn [x y] [(type x) (type y)]))
>
> You can then write implementations such as
>
> (defmethod + [java.lang.Integer java.lang.Double] ...)
>
> You can also provide a default implementation, of course:
>
> (defmethod + :default ...)
>
> But suppose you want to provide a default for one argument only?
> Something like
>
> (defmethod + [java.lang.Integer ::any] ...)
>
I think it is best to think about this differently than :default, it's
more about a universal parent than about a missing dispatch value.
> i.e. a multimethod that matches all invocations in which the first
> argument is an integer. I don't currently see a simple way to do
> this. For types in the Java class hierarchy, you can use Object as
> the parent of all types, but there is nothing equivalent in Clojure's
> ad-hoc hierarchies.
>
> Would it be a good idea to provide the possiblity to add a universal
> parent to hierarchies? Or would that create any problems? Is there
> another solution for the situation I described?
>
Yes, don't know, and no. I briefly looked at this but only got as far
as to decide Object couldn't be the universal parent. I think you have
to reserve a value that will never otherwise be used.
Rich
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to clojure@googlegroups.com
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---