3
나는 선택적 인수 opts
을 복용하는 기능에 대한 전제 조건에 Prismatic schema.core/maybe
를 사용하기 위해 노력하고있어,하지만 내가 더 opts
와 함수를 호출 할 때 항상 AssertionError
를 던질 것 같다Plomatic schema.core/Clojure 함수 전제 조건을 사용할 수 있습니까?
(require '[schema.core :as schema])
(defn foo [& modules]
{:pre [(schema/validate (schema/maybe [(schema/enum :foo :bar)]) opts)]}
:yay)
(foo :foo)
;=> :yay
(foo :foo :bar)
;=> :yay
(foo)
;=> AssertionError Assert failed: (schema/validate (schema/maybe [(schema/enum :foo :bar)]) modules) user/foo (form-init3808809389777994177.clj:1)
흥미로운 것은이 때문이다를 나는 defn
에 macroexpand
을 사용했습니다
(schema/validate (schema/maybe [(schema/enum :foo :bar)]) nil)
;=> nil
,하지만 아무것도 평범한 밖으로 보이는하지 :이 예상대로 작동합니다.
내가
나는 그것을 놓쳤다 고 생각할 수 없습니다! 이와 같은 경우 스키마에'valid? '함수가 있기를 바랍니다. 내가'(comp nil? schema.core/check) '로 내 자신을 굴릴 수 있다고 생각합니다. –
그것을 생각해 보았지만, 그렇게했다면 Schema의 멋진 오류 메시지를 잃을 것이므로 어쩌면 나는 (또는 (nil? ...)) 접근법을 고수하는 편이 낫다. –
's/check'는'valid? '의 부정이며, 더 유용합니다 - 설명 오류를 반환하거나 유효성 검사가 통과되면 nil을 반환합니다. 그래서 더 나은 전제 조건은'(not (s/check ...))'일 수 있습니다. –