On Wednesday, January 11, 2017 at 4:23:28 PM UTC-6, david swift wrote: > > Been working on a tiny snippet of code related to multimethods (something > I've never quite wrapped my head around) and when it comes to the > dispatching of the function I'm confused by the order in which I've to pass > the arguments in as it seems to go against all common sense. > > To show what I am trying to do (to begin with); ignoring name > conflictions. Without implementing algorithm details I supply a simple > string for ease. > (defmulti transform (fn [language data] language)) > > (defmethod transform :html > [_ data] > (str data " will be transformed into html"))) >
^ extra ) at the end there fyi > > > (defmethod transform :java-fx > [_ data] > (str data " will be transformed into javafx")) > > What I would expect from this outcome would be to do the following on > dispatch > (transform :html "some data") => "some data will be transformed into html" > This is what I see and that looks right to me. I suspect you somehow have old method impls in your repl state. You should try with a fresh repl. > > But instead the output I actually get ends up being > "some data" > which I assume to be the default for mulitmethods to return the data > value. Though if I were to instead to change the order of the arguments > like so. > > (transform "some data" :html) => "some data will be transformed into html" > The expect outcome I wanted but not with the "correct" argument order I > was expecting, and to also note this (for me) prevents me from having more > than one argument and dispatch case. > I get IllegalArgumentException No method in multimethod 'transform' for dispatch value: some data clojure.lang.MultiFn.getFn (MultiFn.java:156) I know that I can do this approach > (transform {:language :html} "some data") > and it would work in the correct order but it's extra data I'm looking to > avoid for the sake of correct argument order > > Ideally I would of like the code to look something like below > (defmulti transform :language) > > (defmethod transform :html > [data] > (str data " will be transformed into html")) > > (defmethod transform :java-fx > [data] > (str data " will be transformed into javafx")) > > I'd be grateful if someone could give me some simple examples to go by > that work by keyword dispatch that isn't foobaz, thank you :) > -- 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 --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.