2017-10-11 137 views
0

如果您有一套用於驗證分層數據集的規範 - 比如yaml文件。從其中一個子規格中,是否可以引用樹中較早發生的數據?Clojure規範訪問層次結構規範中的數據

+0

你有具體的例子嗎?一般來說,您的內部/嵌套規格不會接收祖先數據,但可以使用外部規格解決問題。 –

+0

我想驗證一些代表複雜數據結構的yaml。我想證明的驗證點是結構的一部分引用同一結構的另一部分的地方,但我想證明引用的部分實際存在。這意味着即將在參考點處應用謂詞並追溯yaml樹,然後返回到參考項目的位置。爲此,我需要能夠獲得驗證引用的規範的父代。 – mmer

+0

看起來你希望我們爲你寫一些代碼。儘管許多用戶願意爲遇險的編碼人員編寫代碼,但他們通常只在海報已嘗試自行解決問題時才提供幫助。證明這一努力的一個好方法是包含迄今爲止編寫的代碼,示例輸入(如果有的話),期望的輸出以及實際獲得的輸出(控制檯輸出,回溯等)。您提供的細節越多,您可能會收到的答案就越多。檢查[FAQ]和[問]。 –

回答

0

這是一種方法的一個例子,你可以採取:根據您的要求,您也許可以讓你的斷言這樣,從外到內的,而不是由內而外

(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"}} 

+0

感謝一個非常有用的答案 – mmer