3

我有一个关于使用Prismatic/schema验证函数的非常简单的问题。我有一个具有单个键的映射模式,其值是一个函数,该函数将Bar模式作为其单个参数并返回任何内容(用于副作用):

(require '[schema.core :as s])

(def Bar {:baz s/Int})
(def Action :???)
(def Foo {:action Action})

问题是,我该如何定义Action?我试过这个:

(require '[schema.macros :as sm])

(def Action (sm/=> s/Any Bar))

这看起来很有希望,但我不能让它验证失败:

(s/explain Action)
;=> (=> Any {:baz Int})

;; This should fail    
(s/validate Foo {:action :anything-goes})
;=> {:action :anything-goes}

我在这里做错了什么?

我阅读了core_test中的文档和测试,但我不知道该怎么做。

4

1 回答 1

9

我发现了这个:https ://github.com/Prismatic/schema/blob/a21cc0113ed497f6410c55d92d9088bd710f0b47/src/cljx/schema/core.cljx#L888

所以它会是这样的:

(def Action (s/make-fn-schema s/Any [[Bar]]))

虽然,文档确实这样说:

目前的功能模式是纯粹的描述性的;它们针对任何功能进行验证,无论实际输入和输出类型如何

于 2014-08-30T11:43:45.587 回答