将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
吗?
答案 0 :(得分:1)
通常的lisp术语是1) normal
2) hot
3) hot pressed
4) non-hot pressed (this is the state you are complaining about)
,+
,1
和2
是值和
3
是一个应用程序。括号表示应用(+ 1 2 3)
。在评估者中,上面的表达式变为+
(apply + '(1 2 3))
是一个基元,它对所有函数的工作方式相同。
apply
args是一个向量或列表,也许'(args的元素),与普通函数调用相同:
(apply swap! app-state update-in [:contacts] f args)