0
如果您有一套用於驗證分層數據集的規範 - 比如yaml文件。從其中一個子規格中,是否可以引用樹中較早發生的數據?Clojure規範訪問層次結構規範中的數據
如果您有一套用於驗證分層數據集的規範 - 比如yaml文件。從其中一個子規格中,是否可以引用樹中較早發生的數據?Clojure規範訪問層次結構規範中的數據
這是一種方法的一個例子,你可以採取:根據您的要求,您也許可以讓你的斷言這樣,從外到內的,而不是由內而外
(s/def ::tag string?)
(s/def ::inner (s/keys :req-un [::tag]))
(s/def ::outer
(s/and
(s/keys :req-un [::inner ::tag])
#(= (:tag %) ;; this tag must equal inner tag
(:tag (:inner %)))))
(s/conform ::outer {:tag "y" ;; inner doesn't match outer
:inner {:tag "x"}})
;=> :clojure.spec.alpha/invalid
(s/conform ::outer {:tag "x"
:inner {:tag "x"}})
;=> {:tag "x", :inner {:tag "x"}}
。
感謝一個非常有用的答案 – mmer
你有具體的例子嗎?一般來說,您的內部/嵌套規格不會接收祖先數據,但可以使用外部規格解決問題。 –
我想驗證一些代表複雜數據結構的yaml。我想證明的驗證點是結構的一部分引用同一結構的另一部分的地方,但我想證明引用的部分實際存在。這意味着即將在參考點處應用謂詞並追溯yaml樹,然後返回到參考項目的位置。爲此,我需要能夠獲得驗證引用的規範的父代。 – mmer
看起來你希望我們爲你寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(控制檯輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[FAQ]和[問]。 –