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

欢迎!请参阅 关于 页面获取更多关于它是如何工作的一些信息。

0
规范

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

我的代码

(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 打印 "成功!" 而 s/conform 返回 :s/invalid。
我是不是遇到了一个错误,还是没有理解这些函数?
或者我的规范从头到尾就是无效的?
(我使用 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)
=> "成功!\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

规范似乎是有效的,我认为我期望这应该是无效的 - 你同意吗?

每当您有一个在符合性和解释上不一致的情况时,都是有疑问的,可能是一个错误。

...