在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))
最好的方法是什么?
答案 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))
。
如果非常频繁地使用命令行参数,您可能仍会发现将数据放在全局原子中更方便,而不是将所有内容都用作参数。这取决于你。