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

Mar*_*ars 1 clojure

在开发过程中,我经常require使用命名空间,然后发现源文件有一个错误,阻止它被编译:

(require '[foo.bar :as fb])
CompilerException java.lang.RuntimeException: ...
Run Code Online (Sandbox Code Playgroud)

我修复错误后,我require再次尝试命名空间,但我不能:

(require '[foo.bar :as fb])
CompilerException java.lang.Exception: namespace 'foo.bar' not found, compiling: ...
Run Code Online (Sandbox Code Playgroud)

我的解决方案是杀死repl并lein repl再次运行,但这显然不太理想.

有没有办法清理以前失败的影响require?

(为什么错误"命名空间......找不到"?这对我没有意义.源文件仍然存在,Clojure能够在一分钟之前找到它 - 这就是我对错误的了解.)

noi*_*ith 5

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

(require '[foo.bar :as foo] :reload)
Run Code Online (Sandbox Code Playgroud)

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

还:reload-all可以加载该命名空间的所有递归所需代码.