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 に答える