2

我在一个程序中遇到了这样的事情:

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

由于上面的代码经常使用,有什么理由更喜欢它而不是简单的def,如下所示?

(def foo 4)

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

4

1 回答 1

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
于 2013-07-21T18:37:57.417 回答