объединить функцию сомнительного вопроса - PullRequest
1 голос
/ 01 августа 2010
Например,

Con используется в (элементе coll Col) (Con #.*

Я полагаю (имя пользователя для посетителей) будет правильным использованием.В чем секрет?

Ответы [ 2 ]

5 голосов
/ 01 августа 2010

«Секрет» заключается в том, что alter - это специальная функция, которая вызывается в транзакции для ссылки, и она имеет эффект вставки текущего значения ссылки в качестве первого параметра в любую функцию, указанную в качестве второго аргумента..

На самом деле нормальное использование для соединения с реф было бы:

(conj @visitors username)

Таким образом, изменение примерно означает следующее:

(alter vistors conj username)
=> (ref-set visitors (conj @visitors username))
2 голосов
/ 02 августа 2010

В Clojure довольно часто для макросов и функций более высокого порядка брать функцию, сопровождаемую аргументами, а затем выполнять ее, вставляя зависимый от контекста аргумент перед предоставленными аргументами.Это делает жизнь звонящего немного легче.Таким образом, вы можете написать:

(alter visitors conj username)

вместо:

(alter visitors #(conj %1 username))

Некоторые другие формы, которые делают это: send, doto, update-in, ->alter-meta!.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...