我在代码库中找到一个有趣的问题,一些标记字面量似乎违反了最小惊讶原则
我们创建了一些纯数据过程的描述,包括从在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
引入的依赖项?或者这太过分了?