我在代码库中发现了关于某些带标签的文本的一个有趣问题,它们似乎违反了最小惊讶原则
我们曾经创建了一些进程的纯数据描述,包括从在 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
诱导的依赖吗?或者那是它的范围之外的步骤?