有没有办法在clojure中设置命名空间作用域变量?

时间:2014-02-20 11:56:45

标签: clojure

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

(ns robot.core)

(def ^:dyanmic myar nil)

(defn somefunction []
   (binding [myvar 1]))

(defn -main []
  ((somefunction)
   (println myvar))

运行那将输出nil,无论如何设置名称空间变量还是需要传递给每个函数?

2 个答案:

答案 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)

我不确定你想做什么,但你知道吗:私有元数据?

(def ^:private wohoo "wohoo")

defvar-

我假设您要将var隐藏在其他名称空间中。