Thanks I didn't know the costume hierarchy at all, it seems to be very useful. I understand it is coupled to the Java object hierarchy. Is there a way to create similar util for strings, as I did on my first example?
On Dec 7, 12:10 pm, Meikel Brandmeyer <m...@kotka.de> wrote: > Hi, > > On Dec 7, 10:21 am, Tzach <tzach.livya...@gmail.com> wrote: > > > (defmulti collide-with foo) > > > (defmethod collide-with ["asteroid" "spaceship"] (print "Boom")) > > (defmethod collide-with ["asteroid" any] (print " Wiiissh")) > > (defmethod collide-with [any "spaceship"] (print "Wooossh")) > > (defmethod collide-with [any any] (print "Dead Space")) > > > The idea is to have a default function for a collision of asteroid > > with anything else, and of spaceship with anything else. > > What foo can I use? > > Eg. a custom hierarchy. Since there is no bottom type, you have to > create it manually. Deriving Object from ::Any takes care of the Java > land. For clojure land you have to derive each type from ::Any (or > anything already deriving from ::Any). > > (def space-hierarchy > (-> (make-hierarchy) > (derive Object ::Any) > (derive ::Spaceship ::Any) > (derive ::Asteroid ::Any))) > > (defmulti collide-with > #(vec (map type %&)) > :hierarchy #'space-hierarchy) > > (defmethod collide-with :default > [_ _] > (print "Dead Space")) > > (defmethod collide-with [::Asteroid ::Any] > [_ _] > (print "Wiiissh")) > > (defmethod collide-with [::Any ::Spaceship] > [_ _] > (print "Wooosssh")) > > (defmethod collide-with [::Asteroid ::Spaceship] > [_ _] > (println "Booom!")) > > Maybe you have to disambiguate with prefer-method in certain cases. (I > don't think, that's the case here, but I haven't tested it...) > > Hope this helps. > > Sincerely > Meikel -- 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 Note that posts from new members are moderated - please be patient with your first post. 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