On Fri, May 11, 2012 at 8:53 PM, James Thornton
<james.thorn...@gmail.com> wrote:
> Is setting a dynamic binding at runtime the recommended way of storing the
>  config map?

There are many ways of doing this. One approach that I have seen a lot
is something like this -

;; core.clj

(def ^:dynamic *settings* {:default :stuff}) ;; the default settings can be nil

(defmacro with-settings [settings & body]
  `(binding [*settings* ~settings]
    ~@body)) ;; or something similar

;; so that the default can be set once and for all
(defn init! [settings]
  (alter-var-root #'*settings* settings))

;; just use *settings*
(defn foo [x]
  ...)

(defn bar [x]
  ...)

;; user.clj

(foo 42) ;; will use the library provided defaults

(core/init! {:custom :settings})

(foo 42) ;; uses the custom settings
(bar "Sophie") ;; uses the custom settings

(with-settings {:my :settings}
  (foo 42)
  (bar "Sophie")) ;; will use the temporary settings

The code above is obviously for explanation only.

I hope that helps.

Regards,
BG

-- 
Baishampayan Ghose
b.ghose at gmail.com

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

Reply via email to