2013-04-26 1 views
3

가정하자 나는 다음과 같은 Clojure의 함수 호출이 있습니다Clojure - 맵 항목을 자동으로 함수 매개 변수로 변환하는 구문적인 설탕?

(def mymap {:a1 1 :a2 2}) 

(defn my-adder [input-map] 
    (let [a1 (:a1 input-map) 
      a2 (:a2 input-map)] 
     (+ a1 a2))) 

(my-adder mymap) 

내가 무엇을 찾고 있어요 것은 자동으로 PARAMS지도를 변환하여 내 가산기 기능을 간단하게 할 수있는 방법입니다 - 뭔가 같은 :

(defn my-adder [(magic-function input-map)] 
    (+ a1 a2)) 

내가 누락 된 부분을 누군가가 알려줄 수 있습니까?

답변

5

당신이 찾고있는 것은 파괴라고 생각합니다. 할 수있는 일은 다음과 같습니다.

(def mymap {:a1 1 :a2 2}) 

(defn my-adder [{:keys [a1 a2]}] 
     (+ a1 a2)) 

(my-adder mymap) 

You can learn more about it here. 단순히지도에서 모든 값을 추가하는 경우

+0

: 열쇠! 그게 내가 찾고 있었던 것. – hawkeye

+0

np, 당신이 사물을 파괴 할 수있는 많은 다른 방법이 있다는 것을 알아 두십시오. –

+0

확장 할 수 있습니까? – hawkeye

2

다음과 같이 사용할 수 있습니다. 그것은 Clojure : Destructuring라고 불립니다. 당신은 더 찾을 수 있습니다 here

(defn my-adder [{a1 :a1 a2 :a2}] 
     (+ a1 a2)) 
1

destructuring을 보여주는 답변 외에도 함께 당신을 위해 괜찮 apply 사용 vals 수 :

(defn my-adder [m] 
    (apply + (vals m))) 
0

또는 당신의 FNK 기능을 사용할 수 있습니다 the plumbing libary

(use 'plumbing.core) 

(defnk my-adder [a b] 
    (+ a b)) 
관련 문제