有没有办法在clojure中设置命名空间范围的变量?
我是clojure新手,但我想知道是否可以设置命名空间范围的变量有没有办法在clojure中设置命名空间范围的变量?,clojure,Clojure,我是clojure新手,但我想知道是否可以设置命名空间范围的变量 (ns robot.core) (def ^:dyanmic myar nil) (defn somefunction [] (binding [myvar 1])) (defn -main [] ((somefunction) (println myvar)) 运行将输出nil,是否需要设置命名空间变量,或者是否需要将它们传递给每个函数?函数允许您更改变量的根绑定: (def ^:dyanmic *myv
(ns robot.core)
(def ^:dyanmic myar nil)
(defn somefunction []
(binding [myvar 1]))
(defn -main []
((somefunction)
(println myvar))
运行将输出nil
,是否需要设置命名空间变量,或者是否需要将它们传递给每个函数?函数允许您更改变量的根绑定:
(def ^:dyanmic *myvar* nil)
(defn somefunction []
(alter-var-root #'*myvar* (constantly 1)))
(defn -main []
(somefunction)
(println *myvar*))
另一方面,功能。允许您使用重新定义的
^:dyanmic
变量运行某些代码,而无需更改其核心绑定。我不确定您想做什么,但您知道:私有元数据
(def ^:private wohoo "wohoo")
然后呢
我假设您想对其他名称空间隐藏您的var。FYI:
^:dynamic
允许您使用绑定使线程本地唯一可见的值<你链接到的code>altervar root解释说它实际上改变了var,并且对所有线程都可见。这是危险的,不推荐使用@凯龙,什么是“危险”?