Clojure repl - 我如何确保 :reload-all 确实重新加载了所有必需的命名空间?

Unc*_*Bob 3 clojure leiningen

lein REPL 中存在一种奇怪且非常烦人的行为,更不用说通常很耗时。

也就是说,如果我将 :reload-all 与命名空间一起使用,并且它所需的命名空间有错误,则 repl 不会告诉我有关它的任何信息。它只需要上述命名空间的最后一个有效构建,并没有通知我它这样做了。

显然,在大多数情况下,这是非常不令人满意的。因为我不会使用 :reload-all 如果所需的命名空间都没有更改,并且如果它们更改并包含错误,我非常想知道它,并且不会突然想知道为什么我正在执行代码REPL 似乎做的事情与我屏幕上的代码完全不同。

有没有办法强制这种行为?

Ole*_*Cat 5

tools.namespace 图书馆可以帮到你。

通过或重新加载代码存在已知问题。因此,不要尝试使用:(require ... :reload)(require ... :reload-all)requireclojure.tools.namespace/refresh

user> (clojure.tools.namespace.repl/refresh)
Run Code Online (Sandbox Code Playgroud)

它将扫描您的项目以查找已更改的文件/命名空间,并以正确的顺序重新加载它们及其依赖项。

refresh将在重新加载期间报告相关命名空间中的错误。

另外,阅读的要求为您的代码使用这个库和潜在的问题。