Hier ist meine clojure Spezifikation für Schluckauf wie Syntax geschrieben.clojure spec fdef nicht funktioniert - während rekursive Definition übergeben
(:require
[clojure.spec.alpha :as s]
[clojure.spec.test.alpha :as st]
))
(s/def ::tag (s/and
keyword?
#(re-matches #":[a-z]+([0-9]+)?"
(str %))))
(s/def ::org-content (s/cat
:tag ::tag
:content (s/+ (s/or
:str string?
:content ::org-content
))))
ich eine einfache Funktion spec hier geschrieben -
(s/fdef org-headers-h3
:args (s/cat :contact ::org-content)
:ret keyword?)
(defn org-headers-h3 [doc]
(first doc))
(st/instrument `org-headers-h3)
(org-headers-h3 [:div [:h1 "d"]])
Es führt die folgenden Fehler -
*Call to #'modcss2.parser/org-headers-h3 did not conform to spec:
In: [0] val: [:div [:h1 "d"]] fails spec: :modcss2.parser/tag at:
[:args :contact :tag] predicate: keyword? :clojure.spec.alpha/spec
#object[clojure.spec.alpha$regex_spec_impl$reify__1200 0x6613f384
"[email protected]"]
:clojure.spec.alpha/value ([:div [:h1 "d"]])
:clojure.spec.alpha/args ([:div [:h1 "d"]])
:clojure.spec.alpha/failure :instrument*
ich mich scheinen, erhalte ich Fehler für falsche Art von Argumente übergeben . aber ich werde für die folgende Aussage wahr.
(s/valid? ::org-content [:div [:h1 "d"]]) => true