我在代码库中发现了关于一些标记字面量似乎违反最小惊喜原则的有趣问题
我们创建了一些纯数据描述的过程,包括从在 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
诱导的依赖?或者这是它过分做的一个步骤?