我在代码库中发现了关于一些带有标签的字面量违反最低惊讶原则的有趣问题
我们一直在创建一些纯数据流程描述,包括来自在 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
引起的依赖关系吗?或者这太过于超出它的能力范围了?