2016-08-03 4 views
3

(s/keys :opt [::k1 ::k2])에 언급 된 키의 기본값을 지정하는 방법이 있습니까? 같은은 clojure.spec에 기본값을 제공합니다.

뭔가 :

(s/keys :opt [(with-default ::k1 "default1") (with-default ::k2 "default2")]) 

가 아니면 clojure.spec 이외의 디폴트 값을 처리하는 것이 더 관용적인가?

답변

1

나는 그렇게 생각하지 않는다. clojure.spec은 주로 데이터 유효성 검사 및 구조와 관련이 있으며, 풍부화, 강제 변환 또는 변경 데이터가 아닙니다. 그래서 당신 스스로 그것을해야 할 것입니다. 예 :

(merge {::k1 "default" ::k2 "default"} {::k1 2}) ;;=> {::k1 2, ::k2 "default"} 

또는 연관 destructuring 사용 :

(let [{k1 ::k1 k2 ::k2 :or {k1 "default", k2 "default"}} 
     {::k1 2}] 
    [k1 k2]) ;; => [2 "default"] 

또는 유사를 :

(let [{:keys [::k1 ::k2] :or {k1 "default" k2 "default"}} 
     {::k1 2}] 
    [k1 k2]) ;; => [2 "default"] 
+0

동의하지만 clojure.spec/conform이 입력 내용을 수정할 수 있다고 문서에 명시되어 있습니다. 다음의 경우에 : 매개 변수가 clojure.spec/coll-of에 주어집니다. – aav

0

가 명시 적 기능 사양이를 위해없고 난 당신이 그것을 처리 기대 코드가 아니라 사양에 있습니다.

이 작업을 s/conformer으로 수행하는 것이 가능하지만이 기능을 사용하는 것이 좋습니다.