Почему я получаю Не удается динамически связать нединамический var?

Я пытаюсь использовать функцию dotrace для пространства имен clojure.tools.trace.

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

Но я получил эту ошибку:

IllegalStateException Невозможно динамически связывать нединамический var: my-ns/my-function clojure.lang.Var.pushThreadBindings(Var.java:339)

Что это значит? почему я его получаю?

(Я использую Clojure 1.3)

Ответ 1

Я думаю, вам нужно объявить вашу функцию динамически связанной, например.

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

Причина этого в том, что если вы явно не запрашиваете динамический var, Clojure (1.3 вверх) сделает его нединамическим как оптимизацию производительности.