gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 02:05:51 25 4
gpt4 key购买 nike

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

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com