Clojure 这个defn方法1[{:keys[abc]:as obj}]映射方法是如何工作的?

Clojure 这个defn方法1[{:keys[abc]:as obj}]映射方法是如何工作的?,clojure,Clojure,我有下面的Clojure代码 (defn myFunction [{:keys [a b c] :as myAtom}] (let [new-a 1] (+ new-a a) (assoc myAtom :a new-a))) 我想知道如何:keys和:as work第一行定义一个函数(在var中),该函数接受一个必须是map的参数 (defn myFunction [{:keys [a b c] :as myAtom}] 然后,它创建一个let语句,将给定符号abc绑定到

我有下面的Clojure代码

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

我想知道如何:keys和:as work

第一行定义一个函数(在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)))
最后一段使用绑定到整个映射的符号(作为参数传递)as并调用assoc来创建一个新映射,将:a与new-a中的值关联起来。然后将其作为函数的值

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

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

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

(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)))
最后一段使用绑定到整个映射的符号(作为参数传递)as并调用assoc来创建一个新映射,将:a与new-a中的值关联起来。然后将其作为函数的值

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

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

它被称为(关键)参数分解,很好的概述,这是一篇非常好的文章,谢谢!它被称为(关键)参数分解,很好的概述,这是一篇非常好的文章,谢谢!