This might be a bit of a strange or off-topic segue but it got me thinking. 
Is there an idiomatic way to handle optional dependencies in Clojure?

Ideally, this macro would be a part of core.match itself (submit a pull 
request, get it merged, and whatnot). Of course, you don't want core.match 
to minimize its dependencies so it probably shouldn't depend on any test 
infrastructure (in theory; this test infra is in core so who cares). I've 
had to do something like this for another project, and my solution was:

(try
  (require 'the.library.of.interest)
  (do-whatever defmacro or whatnot)
  (catch java.io.FileNotFoundException _ nil))  ; Makes this entire 
try-catch block do nothing if the require failed.

That works pretty well, but I'm wondering why I don't see optional 
dependencies more often with stuff like that.

Cheers,
-- Morgon

On Monday, June 22, 2015 at 4:27:55 PM UTC-4, whodidthis wrote:
>
> Thanks, exactly what i needed
>
> On Monday, June 22, 2015 at 1:01:30 AM UTC+3, Sean Corfield wrote:
>>
>> How about this:
>>
>>     (defmacro matches [value pattern]
>>       `(is (match ~value ~pattern true :else false)
>>            (str "(match " ~value " " '~pattern ")")))
>>
>>     (let [a {:x 2}]
>>       (matches a {:y _}))
>>
>>
>>     ; => FAIL
>>     ; => (match {:x 2} {:y _})
>>     ; => expected: (clojure.core.match/match a {:y _} true :else false)
>>     ; =>  actual: false
>>
>>

-- 
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