我在命名空间中有一个def,我希望在应用程序启动时初始化一次,但每次包含“def”的命名空间被“使用”并且:从另一个命名空间重新加载,然后重新评估“def” 。如何防止在重新加载期间重新评估“def”?
答案 0 :(得分:14)
defonce
会让你关闭,但如果名称空间是:reloaded仍会再次定义,因为(use 'my.namespace :reload)
首先抛出旧的根绑定。
Defonce是一个宏,用于检查var是否已在给定命名空间中具有根绑定,然后仅在其未定义时才定义。您可以使用此方法来解决您的问题,方法是将此特殊def放入其自己的命名空间中,并使用(in-ns ... )
来保护它不被重新加载消除。然后你可以根据需要重新加载'main'命名空间,代码只能定义一次。
答案 1 :(得分:1)