在Clojure中使用带有clj-schema的松散模式

时间:2014-03-12 17:54:26

标签: clojure clj-schema

我想创建我认为称为松散架构的内容,以验证Clojure地图的内容。

clj-schema示例让我相信我只需将:loose指定为def-map-schema的第一个参数。然而,这似乎不起作用。

考虑以下测试(使用midje):

(def-map-schema loose-schema :loose [[:id] Number])

(fact (empty? (validation-errors loose-schema {:id 1})) => true)            ; OK
(fact (empty? (validation-errors loose-schema {:id "string"})) => false)    ; OK
(fact (empty? (validation-errors loose-schema {:id 1 :foo "bar"})) => true) ; NO!

第三次测试产生:

  

"架构中未指定路径[:foo]。"

如何让架构忽略无关的地图条目?

1 个答案:

答案 0 :(得分:0)

我有错误的论据。

def-map-schema返回的架构实际上并没有松动:

(loose-schema? loose-schema)
=> false

而不是:

(def-map-schema loose-schema :loose [[:id] Number])

正确的形式是:

(def-map-schema :loose loose-schema [[:id] Number])