bound-fn

added
1.1

ns
clojure.core

type
macro

(bound-fn & fntail)

Returns a function defined by the given fntail, which will install the
same bindings in effect as in the thread at the time bound-fn was called.
This may be used to define a helper function which runs on a different
thread, but needs the same bindings in place.

                (def ^:dynamic *some-var* nil)

(defn f [] (println *some-var*))

;; run f without a new binding
user=> (f)
nil
nil

;; run f with a new binding
user=> (binding [*some-var* "hello"]
         (f))
hello
nil

;; run f in a thread with a new binding
user=> (binding [*some-var* "goodbye"]
         (.start (Thread. f)))
nil
nil

;; run a bound f in a thread with a new binding
user=> (binding [*some-var* "goodbye"]
         (.start (Thread. (bound-fn [] (f)))))
goodbye
nil