我正在尝试使用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)
答案 0 :(得分:19)
我认为你需要将你的函数声明为动态绑定,例如
(def ^:dynamic my-function
(fn [x] .....))
原因在于,如果您没有明确要求动态变量,Clojure(1.3向上)将使其成为非动态性能优化。