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.

Reply via email to