맵에 대한 기본값 집합이 있는데 값이없고 저장된 기본값을 적용 할 수 있습니다.클로저의 스파 스 (sparse) 중첩 된 맵에서 기본값 설정
즉 내가 다음 입력
(def defaults {:config {:tablet {:urls [] :enable false}}})
(def stored {:config {:tablet { :enable true }}})
있어 만약 내가 다음과 같은 결과를 만들 수 있도록하고 싶습니다.
{:config {:tablet {:urls [] :enable true}}}
따라서 저장된 값은 존재할 때 사용되지만 기본값은 해당 키가 존재하지 않을 때 사용됩니다. merge
, merge-with merge
, merge-with concat
, merge-with conj
및 몇 가지 다른 주문을 시도했지만 아무 것도 작동하지 않는 것 같습니다. 하나는 이고, 일은 중첩의 최대 깊이를 알고 있다면 (merge-with (partial merge-with ... (partial merge-with merge) ...))
이지만 꽤 해킹 된 것입니다. 마치 Clojuresque 코드에서 드문 것처럼 보이는 것처럼 간단한 해결책이있는 것처럼 보입니다. 다음의 라인을 따라
[깊은 병합] (https://github.com/richhickey/clojure-contrib/blob/2ede388a9267d175bfaa7781ee9d57532eb4f20f/ src/main/clojure/clojure/contrib/map_utils.clj # L41) –