User Tools

Site Tools


tips:clojure:destructuring

맵 인수분해

기본

(defn f [{:keys [a b c] :as all}]
  [a b c all])
 
(f {:a 1 :b 2 :c 3})
;=> [1 2 3]

특정키만 이름 바꾸기

(defn f [{:keys [a b] different-name :c}]
  [a b different-name])
 
(f {:a 1 :b 2 :c 3})
;=> [1 2 3]

내포맵 인수분해

(defn f [{{:keys [a b c]} :d}]
  [a b c])
 
(f {:a 1 :b 2 :c 3 :d {:a 10 :b 20 :c 30}})
;=> [10 20 30]

디폴트 값 주기

(defn f [{:keys [a b c] :or {c 99}}]
  [a b c])
 
(f {:a 1 :b 2 :c 3})
;=> [1 2 3]
 
(f {:a 1 :b 2})
;=> [1 2 99]

symbol 키 맵 인수분해

(defn f [{:syms [a b c]}]
  [a b c])
 
(f {'a 1 'b 2 'c 3})
;=> [1 2 3]

string 키 맵 인수분해

(defn f [{:strs [a b c]}]
  [a b c])
 
(f {'a 1 'b 2 'c 3})
;=> [1 2 3]

named parameters

맵 인수분해는 리스트에 대해서도 동작한다.

(let [{:keys [a b]} '("X" "Y" :a 1 :b 2)]
  [a b])
;=> [1 2]
(defn f [& {:keys [a b c]}]
  [a b c])
 
(f :a 1 :b 2 :c 3)
;=> [1 2 3]
tips/clojure/destructuring.txt · Last modified: 2019/02/04 14:26 (external edit)