bound-fn*

clojure.core

  • (bound-fn* f)
Returns a function, which will install the same bindings in effect as in
the thread at the time bound-fn* was called and then call f with any given
arguments. This may be used to define a helper function which runs on a
different thread, but needs the same bindings in place.

1 Example top

  • (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
    
Log in to add / edit an example.

See Also top

Log in to add a see also.

Plus_12x12 Minus_12x12 Source clojure/core.clj:1781 top

(defn bound-fn*
  "Returns a function, which will install the same bindings in effect as in
  the thread at the time bound-fn* was called and then call f with any given
  arguments. This may be used to define a helper function which runs on a
  different thread, but needs the same bindings in place."
  {:added "1.1"
   :static true}
  [f]
  (let [bindings (get-thread-bindings)]
    (fn [& args]
      (apply with-bindings* bindings f args))))
Vars in clojure.core/bound-fn*:
Used in 0 other vars

Comments top

No comments for bound-fn*. Log in to add a comment.