我在一个程序中遇到过类似的事情:
(defonce foo nil)
(alter-var-root #'foo (constantly 4))
由于上面的代码一直使用 ,有没有理由更喜欢简单的 def ,喜欢下面?
(def foo 4)
是否只是为了使其与 defonce 更加一致,还是有使用def的缺点?
答案 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