我想使用 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 函数的编写器时,它会按预期工作。使用 core.async 在 Clojure 中写入日志文件的惯用方法是什么?提前致谢!
*我正在使用灯台。
wrtr
is a java.io.BufferedWriter http://docs.oracle.com/javase/7/docs/api/java/io/BufferedWriter.html.
当你寄出42
(长)进入频道,您正在呼叫(.write wrtr 42)
它调用这个方法:
write(int c)
Writes a single character.
42
代表\*
上的字符ASCII 表 http://www.asciitable.com/这就是正在写的内容。
相反,您想通过调用此 Writer 方法(.write wrtr "42")
:
write(String str)
Writes a string.
您可以通过将从通道读取的值转换为字符串来做到这一点:
(.write wrtr (str v))
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)