我在我们的代码库中发现了关于一些带标签字面量似乎违反最小惊讶原则的有趣问题
我们创建了一些纯数据过程描述,包括从data_readers.cljc
中声明的自定义带标签字面量读取器中的某些defrecord
对象,并让这些defrecord
对象参与一个协议。这一直运行得很好,直到我遇到这个问题
有人将这些带标签字面量中的一个放入了def
(乍一看这似乎是合理的)
(def foo #ctx/event-path [:blah])
这还没问题...直到调用c.t.n.r/refresh
后,之后一切都崩溃了
结果是defrecord
对象foo
有一个过时的类(或许是因为由data_readers.cljc
中声明的带标签字面量解析器引起的命名空间依赖关系不被tools.namespace
识别,并且命名空间因此而按顺序重新编译),因此不再参与该协议
是否应该让tools.namespace
能够识别由data_readers.cljc
引起的依赖?或者这是对其一步过远的要求?