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