重现
(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}