我有一个关于使用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}
我在这里做错了什么?
答案 0 :(得分:9)
所以它会是这样的:
(def Action (s/make-fn-schema s/Any [[Bar]]))
虽然,文档确实这样说:
目前功能模式纯粹是描述性的;无论实际的输入和输出类型如何,它们都会对任何函数进行验证