2014-08-30 5 views
3

Prismatic/schema을 사용하여 함수의 유효성을 검사하는 방법에 대한 간단한 질문이 있습니다. 나는 하나의 키가 맵에 대한 스키마를 가지고,의 값이 (부작용에 사용)의 단일 인수로 Bar 스키마를 취하고 무엇을 반환하는 함수입니다 :Clojure에서 프리즘/스키마를 사용하여 함수 유효성 검사

(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} 

?

나는 docscore_test의 테스트를 읽었지만 어떻게해야하는지 알 수 없습니다.

답변

9

나는이 발견했습니다 문서가이 말을 않고 있지만

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

: https://github.com/Prismatic/schema/blob/a21cc0113ed497f6410c55d92d9088bd710f0b47/src/cljx/schema/core.cljx#L888

그래서이 같은 일 것

은 현재 스키마 순전히 설명이다 기능; 실제 입력 및 출력 유형에 관계없이 모든 함수에 대해 유효성 검사를 수행합니다.

+0

OK. 미래에 시행 될 수있는 기술 코드가 많은 가치를 지니고 있기 때문에 어쨌든 스키마를 만들면 좋습니다. 코드를 자세히 읽어 주셔서 감사합니다! –