Clojure 何时使用alter var root(持续)?
我在一个节目中遇到了这样的情况:Clojure 何时使用alter var root(持续)?,clojure,Clojure,我在一个节目中遇到了这样的情况: (defonce foo nil) (alter-var-root #'foo (constantly 4)) 由于上面的代码经常使用,有什么理由喜欢它而不是像下面这样的简单的def (def foo 4) 这仅仅是为了使其与Defon更加一致,还是使用def有缺点 (ns banana) (defonce foo nil) (ns user) (use 'banana) foo ;=> nil (alter-var-root #'foo (co
(defonce foo nil)
(alter-var-root #'foo (constantly 4))
由于上面的代码经常使用,有什么理由喜欢它而不是像下面这样的简单的def
(def foo 4)
这仅仅是为了使其与Defon更加一致,还是使用def有缺点
(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