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)

私が探しているのは、マップを params に自動的に変換することで 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: Destructuring と呼ばれます。詳細はこちら

(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 に答える