clojure - 如何在 clojure 中得到 "def"而不重新加载?

标签 clojure

我在命名空间中有一个 def,我希望在应用程序启动时初始化一次,但是每次包含“def”的命名空间被“使用”并且:从另一个命名空间重新加载时,都会重新评估“def” 。如何防止“def”在此重新加载期间被重新评估?

最佳答案

defonce 会让你接近,但如果命名空间是 :reloaded ,它仍然会被再次定义,因为 (use 'my.namespace :reload) 首先抛出旧的根绑定(bind)。

Defonce 是一个宏,它检查 var 是否已经在给定命名空间中具有根绑定(bind),如果没有,则仅定义它。您可以使用它来解决您的问题,方法是将这个特殊的 def 放入其自己的命名空间中,并使用 (in-ns ... ) 来保护它不被重新加载删除。那么您可以根据需要多次重新加载“主”命名空间,并且代码应该只定义一次。

关于clojure - 如何在 clojure 中得到 "def"而不重新加载?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4599238/

相关文章:

multithreading - 何时使用非阻塞 >!/线程和阻塞>!!/带有 clojure core.async 的 goroutines

clojure 从字符串名称解析函数

clojure - clojure 中的标准差

clojure - Clojure 中的 Do-while 循环?

function - Clojure 中的自动 TCO

clojure - 为什么更多的语言不使用像 Clojures 这样的不可变模型?

clojure - 为什么 Clojure 区分符号和变量?

map - 在 Clojure 中切片 map 的惯用方法是什么?

amazon-s3 - 使用 Clojure 的 Amazonica 创建 S3 签名 URL 时如何指定 ACL 策略?

clojure - 在 clojure ogre 中进行文本和字符串搜索以查询 Janusgraph - 找不到任何函数或方法