我有一個包含參考的集合。該引用由被調用函數生成。鑑於參考值不同,即使值相同,我如何才能比較預期收集和實際收集?Clojure期望與集合中的ref匹配
這是一個更普遍問題的特例。 如何執行部分匹配,標記某些指示不需要完全匹配的元素?
這個問題的重點與測試有關。 我有一個函數返回一個包含引用的表單,我想比較它是否符合我的預期。
基於評論:
我已經這樣做了......
(defprotocol Ireference? (reference? [this]))
(extend-type java.lang.Object Ireference? (reference? [this] false))
(extend-type nil Ireference? (reference? [this] false))
(extend-type clojure.lang.Ref Ireference? (reference? [this] true))
(extend-type clojure.lang.Agent Ireference? (reference? [this] true))
(defn ref->str
"takes an arbitrary tree and replaces all futures
with agnostic strings."
[form]
(clojure.walk/postwalk #(if (reference? %) (list 'ref @%) %) form))
哪些我想要做什麼。
(expect '{:foo (ref :bar) :baz {:zoo (ref :awk)}}
(ref->str {:foo (ref :bar) :baz {:zoo (ref :awk)}})
這給了我一個匹配。
參考?謂詞是從How do we test whether something is a reference?
我不知道我明白你在問什麼。你可以發佈一些示例代碼來顯示你正在描述的類型的集合,以及你試圖獲得的結果類型嗎? –
我想我在標題中提到'期望'並沒有說明我在談論測試。我添加了一些示例代碼。進行自頂向下的TDD時只需要部分匹配就很常見。 – phreed
另外,爲什麼沒有'參考?'功能? – phreed