Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure 何时使用alter var root(持续)?_Clojure - Fatal编程技术网

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