当使用spec/or未指定参数时,spec/valid?和spec/explain出现矛盾。
最小示例
(s/valid? (s/or) :something) => false (s/explain (s/or) :something) 成功! => nil
类似{{or}},{{s/or}}应该失败验证任何内容(因此第一次调用是好的),但应该报告explain中的错误(因此explain结果是不好的)。
建议:在s/or explain中,逻辑映射过所有 preds 编建每个值不匹配的问题列表,但未显式处理没有 preds 的基本情况。代码中的更改检查该情况并构建一个针对整个 s/or 不匹配的具体 explain 错误。补丁包括对(s/or)和(s/and)的修复和测试(这是好的)。
补丁:clj-2360.patch