2013-04-26 75 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

:keys!那就是我正在尋找的東西。 – hawkeye 2013-04-26 07:52:37

+0

np,請注意有很多不同的方法可以解構事物。 – 2013-04-26 16:45:18

+0

你可以擴展一下嗎? – hawkeye 2013-04-28 12:11:39

2

使用可以使用像波紋管。它被稱爲Clojure:解構。你可以找到更多的here

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

除了展示解構的答案,你也可以使用applyvals如果只是簡單地從地圖上添加所有值加在一起是對你罰款:

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