目前有些规格上的操作难以实现,因为没有统一的方法来查找由规格所组成的“子规格”。例子
* 依赖分析
* 深度描述(展示顶层规格使用的所有规格)
* 检测缺失或无效的规格名称
例如,给定
(s/def ::user-id int?)
(s/def ::user (s/keys :req [::userid])) ;; note misspelling
(s/valid? ::user {::userid "Jim"}) ;; => true but expect false
并且确定 ::user 的“子规格”的方法,一个代码检查工具可以检查 s/keys 中的所有键是否都已是定义的规格。
*解决方案:
1. {{form}} 可以用来获取原始的规格形式,但之后还需要进一步解释(并且失去了它被创建时的原始词法环境)。例如尝试:
https://gist.github.com/ericnormand/6cfe6809beeeea3246679e904372cca02. Spec 形式规格 (CLJ-2112) 尚未提供,但可以用来获取规格的解析表示,这仍然需要进行一些处理,但至少会有已知的格式。
*建议:
添加一个机制来获取一个规格所组成的“子规格”。每个规格实现可以自行选择以适当方式实现此功能。