我是clojure的新手,但我想知道是否可以设置命名空间范围的变量。
(ns robot.core)
(def ^:dyanmic myar nil)
(defn somefunction []
(binding [myvar 1]))
(defn -main []
((somefunction)
(println myvar))
运行那将输出nil
,无论如何设置名称空间变量还是需要传递给每个函数?
答案 0 :(得分:1)
alter-var-root函数允许您更改变量的根绑定:
(def ^:dyanmic *myvar* nil)
(defn somefunction []
(alter-var-root #'*myvar* (constantly 1)))
(defn -main []
(somefunction)
(println *myvar*))
另一方面, binding功能。允许您使用重新定义的^:dyanmic
变量运行一些代码而不更改它的核心绑定。
答案 1 :(得分:0)