Clojure repl - 我如何确保 :reload-all 确实重新加载所有必需的名称空间?
Clojure repl - how can I insure that :reload-all does indeed reload all required namespaces?
在 lein REPL 中有一个奇怪且非常烦人的行为,更不用说经常耗时了。
即,如果我将 :reload-all 与命名空间一起使用,并且它所需的命名空间有错误,则 repl 不会告诉我任何相关信息。它只是采用了所述命名空间的最后一个有效构建,并且没有通知我它这样做了。
显然,在大多数情况下,这是非常不能令人满意的。因为如果 none 所需的命名空间发生了变化,我不会使用 :reload-all ,如果它们发生了变化并且包含错误,我非常想知道它,而不是突然想知道为什么我的代码在 REPL 中执行的内容似乎与我在屏幕上显示的代码完全不同。
有没有办法强制这种行为?
tools.namespace
图书馆也许能帮到你。
有 known issues 个通过 (require ... :reload)
或 (require ... :reload-all)
重新加载代码。因此,请尝试使用 clojure.tools.namespace/refresh
:
而不是 require
user> (clojure.tools.namespace.repl/refresh)
它将扫描您的项目以查找已更改的 files/namespaces 并以正确的顺序重新加载它们及其依赖项。
refresh
将在重新加载期间 report about errors 从属命名空间中。
此外,请阅读有关 requirements for your code to use this library and potential issues 的内容。
在 lein REPL 中有一个奇怪且非常烦人的行为,更不用说经常耗时了。
即,如果我将 :reload-all 与命名空间一起使用,并且它所需的命名空间有错误,则 repl 不会告诉我任何相关信息。它只是采用了所述命名空间的最后一个有效构建,并且没有通知我它这样做了。
显然,在大多数情况下,这是非常不能令人满意的。因为如果 none 所需的命名空间发生了变化,我不会使用 :reload-all ,如果它们发生了变化并且包含错误,我非常想知道它,而不是突然想知道为什么我的代码在 REPL 中执行的内容似乎与我在屏幕上显示的代码完全不同。
有没有办法强制这种行为?
tools.namespace
图书馆也许能帮到你。
有 known issues 个通过 (require ... :reload)
或 (require ... :reload-all)
重新加载代码。因此,请尝试使用 clojure.tools.namespace/refresh
:
require
user> (clojure.tools.namespace.repl/refresh)
它将扫描您的项目以查找已更改的 files/namespaces 并以正确的顺序重新加载它们及其依赖项。
refresh
将在重新加载期间 report about errors 从属命名空间中。
此外,请阅读有关 requirements for your code to use this library and potential issues 的内容。