错误后如何将命名空间重新加载到repl中?

时间:2014-12-04 05:09:30

标签: clojure

在开发期间,我经常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能够找到它一分钟早些时候 - 这就是我对错误的了解。)

1 个答案:

答案 0 :(得分:5)

require采用可选的:reload参数强制重新加载更改,即使已经运行了require

(require '[foo.bar :as foo] :reload)

当初始加载命名空间时出现错误,或者您只想加载更新版本的命名空间时,这非常有用。

还有:reload-all用于加载该命名空间的所有递归所需代码。