Мне было любопытно, поэтому я проверил исходный код свопа! функция на репозитории Clojure, и это было так:Что такое «.swap» в «swap!» исходный код?
(defn swap!
"Atomically swaps the value of atom to be:
(apply f current-value-of-atom args). Note that f may be called
multiple times, and thus should be free of side effects. Returns
the value that was swapped in."
{:added "1.0"
:static true}
([^clojure.lang.Atom atom f] (.swap atom f))
([^clojure.lang.Atom atom f x] (.swap atom f x))
([^clojure.lang.Atom atom f x y] (.swap atom f x y))
([^clojure.lang.Atom atom f x y & args] (.swap atom f x y args)))
И я не знаю, что такое «.swap» функция делает? Я попытался найти его, но он не определен в том же файле, поэтому не может найти его определения. Или это еще одна особенность, которая на самом деле не является функцией вообще?
[Кодовые части вы хотели] (https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Atom.java#L33). Как вы могли бы извлечь из подсказок типа, они находятся в clojure.lang.Atom (вы можете немного прокрутить список - есть несколько перегрузок .swap). –
, если вам интересно, вот перегрузки swap https://github.com/clojure/clojure/blob/8fda34e4c77cac079b711da59d5fe49b74605553/src/jvm/clojure/lang/Atom.java#L33 – Shlomi