在我的代码库中发现了一个有趣的漏洞,一些标签字面量似乎违反了最小惊讶原则
我们创建了一些纯数据的流程描述,包括从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
引起的依赖?或者这对它来说太遥远了吗?