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