Just copy/paste from my Counterclockwise REPL. :-)

- Chas

On Mar 30, 2013, at 11:54 PM, JvJ wrote:

> Also, nice syntax highlighting!  How'd you do that?
> 
> On Saturday, 30 March 2013 23:54:03 UTC-4, JvJ wrote:
> get-method.  Thanks, that was exactly what I was looking for!
> 
> On Saturday, 30 March 2013 07:20:54 UTC-4, Chas Emerick wrote:
> On Mar 30, 2013, at 12:00 AM, George Oliver wrote:
> 
>> 
>> 
>> On Friday, March 29, 2013 6:19:19 PM UTC-7, JvJ wrote:
>> Is it possible to invoke a particular multimethod and bypass the dispatch 
>> function?
>> 
>> For instance, suppose that I have a multimethod with a dispatch value of 
>> ::foo, and it's a really complex method.
>> 
>> Now, I want all cases where the dispatch function returns nil to use the 
>> same multimethod.  Is there a way I can intercept the nil and
>> pass it directly on to the ::foo multimethod?
>> 
>> You could use the default multimethod to catch nil, and then call the multi 
>> with ::foo. 
> 
> That will only work if the dispatch fn is identity or similar.
> 
> If you control the dispatch fn, then you don't need to "intercept nil" -- 
> just returning ::foo from the dispatch fn when it might otherwise return nil 
> will get you to the method you want.
> 
> If you *don't* control the dispatch fn, but you're providing the methods for 
> :foo and nil, then you can use `get-method` to obtain the method associated 
> with a particular dispatch value:
> 
> => (defmulti foo :bar)
> #'user/foo
> => (defmethod foo :baz
>      [x]
>      (str x))
> #<MultiFn clojure.lang.MultiFn@6194a872>
> => (defmethod foo :default
>      [x]
>      ((get-method foo :baz) x))
> #<MultiFn clojure.lang.MultiFn@6194a872>
> => (foo {:bar :baz})
> "{:bar :baz}"
> => (foo {:some :other :value :here})
> "{:some :other, :value :here}"
> 
> Of course, if the functionality you need is available as a separate top-level 
> fn, and you can avoid the extra effective dispatch through the multimethod, 
> all the better.
> 
> Cheers,
> 
> - Chas
> 
> 
> -- 
> -- 
> 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/groups/opt_out.
>  
>  

-- 
-- 
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/groups/opt_out.


Reply via email to