这个defn method1 [{:keys [a b c]:as obj}] map方法如何工作?

时间:2013-03-28 13:58:10

标签: clojure

我有以下Clojure代码

(defn myFunction [{:keys [a b c] :as myAtom}]
  (let [new-a 1]
    (+ new-a a)
  (assoc myAtom :a new-a)))

我想知道如何:键和:作为工作

1 个答案:

答案 0 :(得分:1)

第一行定义了一个函数(在var中),它接受一个必须是map的参数

(defn myFunction [{:keys [a b c] :as myAtom}] 

然后它创建一个let语句,将给定的符号a b c绑定到通过查找每个符号作为该参数中的关键字而获得的值,并绑定名称myatom到原始地图

  (let [new-a 1]

然后将new-a绑定到值1

    (+ new-a a)

做一些数学并忽略结果

  (assoc myAtom :a new-a)))

这最后一段使用绑定到整个地图的符号(作为参数传递)作为并调用assoc来创建一个新地图,该地图将a与new-a中的值相关联。然后将其重新作为函数的值。

这将返回一个值为1的新地图:a

user> (myFunction {:a 3 :b 3 :c 3})
{:a 1, :c 3, :b 3}