`
(deftype MySpec []
s/Spec
(conform* [_ x]
::s/invalid))
(s/def ::x (MySpec.))
(s/explain ::x :foo)
`
这将因“无法解析 spec: :user/x”异常而失败,但 {{def}} 成功。将 deftype 转换为 defrecord 可以解决问题。
原因: {{with-name}} 函数有 ident?、regex? 和 IObj 的 cond 选项。如果这些选项都不成功,则没有回退案例,s/def 将静默返回 nil。
建议: 在回退案例中抛出错误。
补丁: clj-2135.patch