这个(应用swap!my-atom ...)调用是做什么的?为什么需要申请?

时间:2015-08-10 22:14:30

标签: clojure

swap!作为参数传递给apply背后的逻辑是什么?

(defonce app-state
  (r/atom
    {:contacts
     [{:first "Ben" :last "Bitdiddle" :email "benb@mit.edu"}]}))

(defn update-contacts! [f & args]
  (apply swap! app-state update-in [:contacts] f args))

(defn add-contact! [c]
  (update-contacts! conj c))

apply"获取内部价值"并且可用于转换可选择的数据结构'进入一系列论点。任何人都可以帮助我推理使用apply吗?

1 个答案:

答案 0 :(得分:1)

通常的lisp术语是1) normal 2) hot 3) hot pressed 4) non-hot pressed (this is the state you are complaining about) +12是值和

3

是一个应用程序。括号表示应用(+ 1 2 3) 。在评估者中,上面的表达式变为+

(apply + '(1 2 3))是一个基元,它对所有函数的工作方式相同。

apply

args是一个向量或列表,也许'(args的元素),与普通函数调用相同:

(apply swap! app-state update-in [:contacts] f args)