clojure问题的联合函数

pro*_*eek 1 clojure

例如,(例如,联合#{}"Stu")中使用了conj(conj coll item).

但是,我在'Programming Clojure'一书第16页中找到了这个例子.

(alter visitors conj username)

我猜(conj visitor username)将是正确的用法.秘密是什么?

mik*_*era 5

"秘密"是alter是一个在ref上的事务中调用的特殊函数,它具有将ref的当前值作为第一个参数插入到作为其第二个参数提供的任何函数的效果.

事实上,与ref结合的正常用法是:

(conj @visitors username)
Run Code Online (Sandbox Code Playgroud)

因此,大致翻译如下:

(alter vistors conj username)
=> (ref-set visitors (conj @visitors username))
Run Code Online (Sandbox Code Playgroud)