Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/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中设置命名空间范围的变量?_Clojure - Fatal编程技术网

有没有办法在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

我是clojure新手,但我想知道是否可以设置命名空间范围的变量

(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,并且对所有线程都可见。这是危险的,不推荐使用@凯龙,什么是“危险”?