请在2024年的Clojure调查中分享您的想法!

欢迎!请查阅关于页面以获取更多有关如何使用本网站的信息。

0
Spec

如果我们尝试向clojure.spec/keysclojure.spec/keys**在命名参数:opt:opt-un传递非关键字,我们将得到一个断言错误

`
(spec/valid? (spec/keys :opt ['a 5]) {})
;1. 由java.lang.AssertionError引发
; 断言失败:所有键都必须是命名空间限定的关键字
; (every? (fn* [p1__13667#] (c/and (keyword? p113667#) (namespace
; p1
13667#))) (concat req-keys req-un-specs opt opt-un))

(spec/valid? (spec/keys :opt-un ['a 5]) {}
;1. 由java.lang.AssertionError引发
; 断言失败:所有键都必须是命名空间限定的关键字
; (every? (fn
[p1__13667#] (c/and (keyword? p113667#) (namespace
; p1
13667#))) (concat req-keys req-un-specs opt opt-un)))
`

但是,如果我们在命名参数:req:req-un上做同样的事情,参数会被静默忽略,而对keys的调用会返回一个没有任何要求的任何映射的规范

(spec/valid? (spec/keys :req ['a 5]) {}) => true (spec/valid? (spec/keys :req-un ['a 5]) {}) => true (spec/valid? (spec/keys* :req ['a 5]) {}) => true (spec/valid? (spec/keys* :req-un ['a 5]) {}) => true

对于:req(-un)?参数抛出一个断言可能也是必须的。

1 答案

0
...