On Thu, Apr 26, 2012 at 23:35 -0700, Sean Corfield wrote: > On Tue, Apr 24, 2012 at 8:30 PM, Michael <[email protected]> wrote: > > Would it be possible to make resultset-seq a dynamic var > > No, that certainly is not going to happen. Dynamic vars are not the > right way to build an API in Clojure.
Could you elaborate on that please? I see that dynamic variables are used quite
often to give the user the ability to configure/change the behaviour of a
library. That approach is often coupled with a macro that changes the bindings
of dynamic variables. An example of this can be, for example, found in
criterium [0]
--- snip ---
;;; Progress reporting
(def ^{:dynamic true} *report-progress* nil)
(defn #^{:skip-wiki true}
progress
"Conditionally report progress to *out*."
[& message]
(when *report-progress*
(apply println message)))
(defmacro with-progress-reporting
"Macro to enable progress reporting during the benchmark."
[expr]
`(binding [*report-progress* true]
~expr))
--- snip ---
I guess that my confusion stems from your very general statement and my
inexperience so I would be happy if you could give more details. I find using a
dynamic variable in a library in the way exemplified above to be OK and maybe
(??) even idiomatic. It is just hard to "get" Clojure idioms right if a voice
keeps nagging in the back of your head saying "Dynamic vars are not ..."
Thanks!
--
Wolodja <[email protected]>
4096R/CAF14EFC
081C B7CD FF04 2BA9 94EA 36B2 8B7F 7D30 CAF1 4EFC
signature.asc
Description: Digital signature
