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. 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.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?
Konrad.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---