我在命名空间中有一个 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/