何时使用alter-var-root(不断)?

时间:2013-07-21 18:02:19

标签: clojure

我在一个程序中遇到过类似的事情:

(defonce foo nil)
(alter-var-root #'foo (constantly 4))

由于上面的代码一直使用 ,有没有理由更喜欢简单的 def ,喜欢下面?

(def foo 4)

是否只是为了使其与 defonce 更加一致,还是有使用def的缺点?

1 个答案:

答案 0 :(得分:1)

(ns banana)
(defonce foo nil)

(ns user)
(use 'banana)

foo ;=> nil

(alter-var-root #'foo (constantly 42))
foo ;=> 42

(def foo 50)
CompilerException java.lang.IllegalStateException: foo already refers to: #'banana/foo in namespace: user