Dynamic binding is more useful when your function expect the *var* to
change during the program. And sometimes you can't pass arguments
through, like in (run-tests). How about a simple API with this usage:

(set-opt :development) ; this is what you want
...
(get-opt :show-sql) ; need this flag

This is like getting a sys property: it is what it is and your
function is pure with regard to the args and the global state: (System/
getenv "HOME") ; "c:/"

On Mar 10, 2:07 pm, faenvie <faen...@googlemail.com> wrote:
> thanks ken for the answer.
>
> more(?) functional using closures:
>
> (defn get-config [environment]
>   (let [env (condp = environment
>     :development
>       { :whoami "development"}
>     :test
>       { :whoami "test"}
>     :production
>       { :whoami "production"}
>     (throw (IllegalArgumentException.
>         (str "unexpected environment: " environment))))]
>     (fn [keyword] (get env keyword))))
>
> (def config (get-config :development))
>
> (binding [config (get-config :test)]
>   (println (config :whoami)))

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