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

欢迎!有关如何操作的更多信息,请参阅关于页面。

0 投票
Spec
重现


(s/def :fspec-test/plus (s/fspec
                         :args (s/cat :x int? :y pos-int?))
                         :ret pos-int?))

(defn my-plus [x y]
  (+ x y))

(s/explain-data :fspec-test/plus my-plus)

;; #:clojure.spec.alpha{:problems [{:path [:ret], :pred clojure.core/pos-int?, :val 0, :via [:fspec-test/plus], :in []}], :spec :fspec-test/plus, :value #function[expound.alpha-test/my-plus]}



期望:应该有一种方法得到规范(即函数本身,而不是符号)来使返回值失败。这样,我们可以递归地描述为什么返回值未通过规范。

注意,对于非fspec失败,解释数据中包含的是函数本身(而不是符号)


(s/explain-data pos-int? 0)

;; #:clojure.spec.alpha{:problems [{:path [], :pred :clojure.spec.alpha/unknown, :val 0, :via [], :in []}], :spec #function[clojure.core/pos-int?], :value 0}

1 答案

0 投票
参考:[https://clojure.atlassian.net/browse/CLJ-2256](https://clojure.atlassian.net/browse/CLJ-2256)(由 bbrinck 报告)
...