当使用spec/or without parameters时,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