Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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中,声明全局变量的最佳方式是什么?全局变量的值需要在函数中更改,而该全局变量需要在其他名称空间中访问 例: 最好的方法是什么 只需在全局变量中存储一个原子: (def global-var (atom nil)) 注:这是对问题第三条评论的回应。适用于所问的问题 惯用的Clojure支持输出仅由输入参数决定的函数。这与依赖于其参数和全局状态的函数形成对比。很容易将使用全局数据的函数转换为不使用全局数据的函数-您只需要添加一个包含数据的参数。例如:使用(defn print gl

在clojure中,声明全局变量的最佳方式是什么?全局变量的值需要在函数中更改,而该全局变量需要在其他名称空间中访问

例:


最好的方法是什么

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

(def global-var (atom nil))

注:这是对问题第三条评论的回应。适用于所问的问题

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


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

在Clojure社区,这通常被认为是一个坏主意。你到底为什么要这么做?你面临的问题是什么,这将解决?原子是为此而生的。也就是说,几乎总是有更好的方法来解决这类问题。如果您提供更多详细信息,我们可以帮助您利用Clojure的优势解决您的问题。谢谢@Elogent和WolfeFan。当我运行pgm时,用户输入一些命令行参数,我希望参数的值在多个名称空间中,而这些名称空间不是从我的主名称空间直接调用的。在java中,我可以使用setter方法设置类/实例变量,并在其他对象中使用getter方法来获取值。这在clojure中是如何实现的?如果它是一个原子,那么称它为“全局变量”有意义吗:)?
(def global-var (atom nil))