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 [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
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 [email protected].
For more options, visit https://groups.google.com/d/optout.