以下是如何在REPL中重现的步骤
- (c.t.n.r/refresh)
成功
- 修改类路径中任何文件
- (c.t.n.r/refresh)
失败,找不到某些命名空间(不总是相同的命名空间)
这种情况总是发生在特定的项目中,但相对类似的复杂性的其他(已知)项目中没有。与该问题相关联的项目中,AOT编译/执行块和 require
(不使用 (c.t.n.r/refresh)
)都正常工作。对于 (c.t.n.r/refresh)
,在 clojure.tools.namespace.reload/track-reload-one
中以 load-file
替代 require :reload
工作。除了 require :reload
,尚不清楚此错误的根本原因,也不知道为什么 load-file
代替它工作,但是一个简单的补丁,没有已知的副作用。现在我在REPL中每次都热交换代码。
可以在 https://github.com/alexandergunnarson/tools.namespace 找到一个分支,我可以在其中提交一个补丁(如果希望的话)。