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

Reply via email to