2024年Clojure状况调查!中分享您的想法。

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

0
Spec

我正在尝试学习spec,并且遇到了以下行为。

我的代码

(s/def ::foo (s/cat :first symbol?
                :rest (s/alt :simple vector?
                             :multi (s/cat :parts (s/* symbol?) :final vector?))))
(s/explain ::foo '(foo [blah] x))
(s/conform ::foo '(foo [blah] x))

我发现s/explain 会打印 "Success!",而s/conform 返回 :s/invalid。
这是bug,还是我没有理解这些函数?
或者是我的spec本身就有问题?
(我使用Clojure 1.11.1 & spec 0.3.218)

我还发现了一些类似的案例
```
(def test-data (rest '(defn l81!E!_P4.*333?1-_5j ([[:as !t!qI!B4.E4] & Np] nil) :kCMH6DT9E :!PM!:p "@o5Pb.y")))
=> #'cursive.extensions.specs/test-data
(s/conform :clojure.core.specs.alpha/defn-args test-data)
=> :clojure.spec.alpha/invalid
(s/explain-str :clojure.core.specs.alpha/defn-args test-data)
=> "Success!\n"
```
我认为在这里conform 是错误的,因为数据看起来对 defn 是有效的。

更多看起来有效的小案例
```
(defn f+55_Uu+*5RmN.7.5J1 ([VWa.7Y4] :N0) :+_z7+:*)

(defn Y {} ([]) ([& []] _kP_2_A-*du1 "FI5") nil)

(defn I+ {} ([& [:as .]] :y:w?_ n :+:T*7*r-w2 nil " */") "" nil)
```

1 答案

0

Spec看起来是有效的,并认为这应该是不合法的,您同意吗?

确实,任何time you有conform和explain不一致的情况都值得怀疑,可能是bug。

...