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

欢迎!请参阅关于页面,了解更多关于如何使用本站的信息。

0
规范
重现


(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(由bbrinck报告)
...