Just lastly, I've seen people use the following structure of data (def test-html {:language ::html :data "hello"}) and passing it as an argument to the mutlimethod, though not sure if it would or could apply to my case but when I use it simply returns nil under this condition (transform test-html)
But I can do the following and produce a correct output, again not sure if it's to do my approach or not, or even if varargs doesn't allow it… (transform {:language :html} "hello") On Wednesday, 11 January 2017 22:47:02 UTC, Alex Miller wrote: > > Yes, multimethod handles varargs. > > On Wednesday, January 11, 2017 at 4:37:12 PM UTC-6, david swift wrote: >> >> Ah seems the repl state was the cause, restarted and the ordering worked >> correctly though it still confuses me greatly! but I'll get there >> eventually (I hope). as for the extra ')' that was manually retyping into >> forum error :) >> >> Using nightcode editor's insta-repl for testing and seems it doesn't >> refresh the changes. Also does mutlimethod handle varargs? purely for >> testing purposes, doubt it'll be used but just incase >> >> On Wednesday, 11 January 2017 22:29:00 UTC, Alex Miller wrote: >>> >>> >>> >>> 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.