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

规范看起来有效,但我认为我本应期望这是无效的——你同意吗?

在你有不符合规范且未解释的情况时,绝对是可疑的,可能是bug。

...