在Clojure中如何定义可以从其他名称空间访问的全局变量

时间:2016-01-13 19:47:49

标签: clojure

在clojure中,声明全局变量的最佳方法是什么,需要在函数中更改其值,并且需要在其他命名空间中访问此全局变量

前:

(ns ..main
 .....) 

(def global_variable nil)
..
(defn main ...

Change the value of global variable here 

) 

Another name space 

 (ns accessvariable ...) 

 (println (main/global_variable))

最好的方法是什么?

2 个答案:

答案 0 :(得分:1)

只需在您的全局变量中存储一个原子:

(def global-var (atom nil))

答案 1 :(得分:1)

注意:这是对问题的第三条评论的回应。 dAni's answer适用于所提出的问题。

惯用语Clojure支持其输出仅由其输入参数确定的函数。这与依赖于其参数和全局状态的函数形成对比。将使用全局数据的函数转换为不使用全局数据的函数很容易 - 您只需添加一个包含数据的参数即可。例如:您使用(defn print-global [] (println @global-atom-defined-elsewhere))而不是(defn print-my-val [val] (println val))

如果非常频繁地使用命令行参数,您可能仍会发现将数据放在全局原子中更方便,而不是将所有内容都用作参数。这取决于你。

相关问题