1

我有以下 Clojure 代码

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

我想知道 :keys 和 :as 是如何工作的

4

1 回答 1

1

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

(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 中的值相关联。然后将其作为函数的值返回。

这将为 :a 返回一个值为 1 的新映射

user> (myFunction {:a 3 :b 3 :c 3})
{:a 1, :c 3, :b 3} 
于 2013-03-28T18:17:53.140 回答