3

假设我有以下 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)

我正在寻找的是通过自动将映射转换为参数来使 my-adder 函数更简单的某种方法 - 例如:

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

有人可以指出我所缺少的吗?

4

4 回答 4

5

我认为你正在寻找的是解构。以下是您可以执行的操作:

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

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

(my-adder mymap)

您可以在此处了解更多信息

于 2013-04-26T06:28:16.440 回答
2

使用可以像下面这样使用。它被称为 Clojure:解构。你可以在这里找到更多

(defn my-adder [{a1 :a1 a2 :a2}]
      (+ a1 a2))
于 2013-04-26T06:26:13.280 回答
1

除了显示解构的答案之外,您还可以使用apply并且vals如果简单地将地图中的所有值相加就可以了:

(defn my-adder [m]
    (apply + (vals m)))
于 2013-04-26T06:42:03.957 回答
0

或者您可以使用管道库中的fnk函数

(use 'plumbing.core)

(defnk my-adder [a b] 
  (+ a b))
于 2013-04-26T14:49:56.383 回答