Я хочу использовать core.async в качестве регистратора, который записывает данные в файл, поэтому я создал файл test.txt, поместил его в папку ресурсов и написал такой код:
(use 'clojure.java.io)
(use 'clojure.core.async)
(def print-chan (chan))
(go (loop []
(when-let [v (<! print-chan)]
(with-open [wrtr (writer "resources/test.txt" :append true)]
(.write wrtr v))
(recur))))
(>!! print-chan 42)
Однако, когда я запускаю это, я обнаруживаю, что он заменяет только то, что находится в файле, а не добавляет к нему. Кроме того, иногда вывод, который записывается в файл, является нечетным. Однажды я попытался поставить 42 и вместо этого получил *. Когда я использую модуль записи без функций core.async, он работает так, как ожидалось. Каков идиоматический способ записи в файл журнала в Clojure с использованием core.async? Заранее спасибо!
* Я использую световой стол.