由于没有统一的方式来查找某个规格所组成的“子规格”,因此在规格上执行某些操作目前很难实现。以下是一些例子
* 依赖分析
* 深度描述(显示顶级规格使用的所有规格)
* 检测缺失或无效的规格名称
例如,给定
(s/def ::user-id int?)
(s/def ::user (s/keys :req [::userid])) ;; 注意拼写错误
(s/valid? ::user {::userid "Jim"}) ;; => true 但预期为 false
要确定 ::user 的“子规格”,可以使用一个检查器来检查 s/keys 中的所有键是否为已定义的规格。
**解决方案:**
1. 可以使用 {{form}} 来获取原始规格形式,但之后还需要进一步解释(并且缺少创建时原始的词法环境)。示例尝试:
https://gist.github.com/ericnormand/6cfe6809beeeea3246679e904372cca02. 规格形式规格(CLJ-2112)尚不可用,但可以用来获取规格的解析表示,这将仍然需要一些处理,但至少会知道形式。
**提议:**
添加一种机制来获取组成规格的“子规格”。每个规格实现都可以根据需要选择如何以合适的方式实现这一机制。