Clojure 为什么我';我正在买罐头;不动态绑定非动态变量?

Clojure 为什么我';我正在买罐头;不动态绑定非动态变量?,clojure,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)我认为您需要声明您的函数是动态绑定的,例如 (

我正在尝试使用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)

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

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

这样做的原因是,如果您没有明确要求动态变量,Clojure(1.3以上)将使其成为非动态的性能优化。

您还可以为我的函数指定代码吗?谢谢!但是这不应该是
defn
?或者
def
或者
defn
都可以,您可以使用它们来定义您的函数(编辑以明确)