为什么我得到无法动态绑定非动态var?

时间:2012-01-16 02:59:39

标签: clojure

我正在尝试使用clojure.tools.trace命名空间的dotrace函数。

(dotrace [my-function] (my-function 5))

但我收到了这个错误:

  

IllegalStateException无法动态绑定非动态var:my-ns / my-function clojure.lang.Var.pushThreadBindings(Var.java:339)

这是什么意思?为什么我得到它?

(我正在使用Clojure 1.3)

1 个答案:

答案 0 :(得分:19)

我认为你需要将你的函数声明为动态绑定,例如

(def ^:dynamic my-function
   (fn [x] .....))

原因在于,如果您没有明确要求动态变量,Clojure(1.3向上)将使其成为非动态性能优化。