java在Clojure中写入文件
我使用这个函数在Clojure中写入一个文件
(defn writelines [file-path lines]
(with-open [wtr (clojure.java.io/writer file-path)]
(doseq [line lines] (.write wtr line))))
但这总是会产生这样的错误:
IllegalArgumentException No matching method found: write for
class java.io.BufferedWriter in
clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79)
我做错了什么
# 1 楼答案
试试这个:
如果你看一下BufferedWriter的文档,你会发现没有与你调用
write
的方式对应的方法(哎呀,我错过了继承的方法,傻我!)。我认为,绑定到*out*
更容易(除非您还想输出调试信息,在这种情况下可能会有点棘手)# 2 楼答案
根据异常消息,行不是字符串、int(字符)或int数组的序列
# 3 楼答案
首先,对于许多输入,您的函数都可以正常工作:
然而,当你试图传递一些奇怪的信息时,我们会得到你描述的错误:
这个错误是因为
BufferedWriter
有多个重载版本的write
,而clojure不知道调用哪个版本。在这种情况下,冲突的是write(char[])
和write(String)
。对于字符串("a"
)和整数(1
)等输入,clojure知道调用方法的String
版本,但对于其他内容(例如clojure集合,#{1}
),clojure无法决定或者确保
writelines
的输入确实是String
的输入,或者使用str
函数对它们进行字符串化,怎么样另外,看看^{} function