Hi Konrad!
Konrad Hinsen a écrit :
> Given the definitions:
>
> (defmulti foo class)
> (defmethod foo clojure.lang.IPersistentCollection [_] :a-collection)
> (defmethod foo clojure.lang.IPersistentVector [_] :a-vector)
>
> one obtains the following results:
>
> (foo [1 2 3]) -> :a-vector
> (foo #{1 2 3}) -> :a-collection
>
> This looks perfectly logical from an OO point of view, but I cannot
> find anything in the documentation (http://clojure.org/multimethods)
> that actually promises that the vector implementation of foo takes
> precedence over the generic collection version if the argument is a
> vector. Can I rely on that or should I add
>
> (prefer-method foo clojure.lang.IPersistentVector
> clojure.lang.IPersistentCollection)
>
> explicitly?
>
user=> (ancestors clojure.lang.IPersistentVector)
#{clojure.lang.Sequential clojure.lang.Associative
clojure.lang.IPersistentCollection clojure.lang.Reversible
clojure.lang.IPersistentStack}
Hence clojure.lang.IPersistentVector clearly dominates
clojure.lang.IPersistentCollection: there's no need for prefer-method.
"prefer-method <http://clojure.org/api#prefer-method> is used for
disambiguating in case of multiple matches where neither dominates the
other."
Christophe
--~--~---------~--~----~------------~-------~--~----~
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
-~----------~----~----~----~------~----~------~--~---