在开发期间,我经常require
一个命名空间,然后发现源文件有一个错误,阻止它被编译:
(require '[foo.bar :as fb])
CompilerException java.lang.RuntimeException: ...
修复错误后,我再次尝试require
命名空间,但我无法:
(require '[foo.bar :as fb])
CompilerException java.lang.Exception: namespace 'foo.bar' not found, compiling: ...
我的解决方案是杀死repl并再次运行lein repl
,但这显然不太理想。
有没有办法清理之前失败的require
?
(为什么错误"命名空间......找不到"?这对我没有意义。源文件仍然存在,Clojure能够找到它一分钟早些时候 - 这就是我对错误的了解。)
答案 0 :(得分:5)
require
采用可选的:reload
参数强制重新加载更改,即使已经运行了require
。
(require '[foo.bar :as foo] :reload)
当初始加载命名空间时出现错误,或者您只想加载更新版本的命名空间时,这非常有用。
还有:reload-all
用于加载该命名空间的所有递归所需代码。