我在代码库中找到一个问题,一些标签字面量似乎违反了最小惊讶原则
我们创建了一些纯数据处理过程的描述,包括一些 defrecord
对象,这些对象是从 data_readers.cljc
中声明的自定义标签字面量读取器创建的,并且让这些 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
诱发的依赖吗?或者那是它所迈出的过分的一步?