我在代码库中找到一个有趣的问题,一些带标签的字面量似乎违反了最小意外原则
我们创建了一些纯数据流程描述,包括来自在 data_readers.cljc
中声明的自定义带标签的字面量读者的一些 defrecord
对象,让这些 defrecord
对象参与一个协议。这些都是一直很正常,直到我发现这个问题
有人将这些带标签的字面量之一放到了 def
(起初这似乎是个合理的举动)
(def foo #ctx/event-path [:blah])
这是可以接受的... 直到调用 c.t.n.r/refresh
,之后整个系统崩溃了
结果是,defrecord
对象 foo
有一个过期的类(可能是由于在 中声明的带标签的字面量解析程序引起的命名空间依赖关系没有被 tools.namespace
认识到,因此命名空间重新编译的顺序不对),不再参与协议
tools.namespace
应该能够识别 data_readers.cljc
诱导的依赖性吗?或者那是一个太过远的步骤?