सबसे पहले, अपने कार्य में कई आदानों के लिए बस ठीक काम करता है:
Clojure 1.3.0
user=> (defn writelines [file-path lines]
(with-open [wtr (clojure.java.io/writer file-path)]
(doseq [line lines] (.write wtr line))))
#'user/writelines
user=> (writelines "foobar" ["a" "b"])
nil
user=> (writelines "quux" [1 2])
nil
हालांकि, जब आप कुछ अजीब में पारित करने के लिए कोशिश हम मिल त्रुटि आप का वर्णन:
user=> (writelines "quux" [#{1}])
IllegalArgumentException No matching method found: write for class java.io.BufferedWriter clojure.lang.Reflector.invokeMatchingMethod (Reflector.java:79)
यह त्रुटि ऐसा इसलिए है क्योंकि BufferedWriter
में write
के एकाधिक अधिभारित संस्करण हैं और क्लोजर को यह नहीं पता कि कौन से कॉल करना है। इस मामले में विरोधाभासी write(char[])
और write(String)
हैं। तारों जैसे इनपुट ("a"
) और पूर्णांक (1
) क्लोजर विधि के String
संस्करण को कॉल करना जानता था, लेकिन कुछ और (उदाहरण के लिए एक क्लोजर सेट, #{1}
) क्लोजर निर्णय नहीं ले सका।
या तो यह सुनिश्चित करने के बारे में कि writelines
पर इनपुट वास्तव में String
एस हैं या उन्हें str
फ़ंक्शन का उपयोग करके स्ट्रिंग कर रहे हैं?
इसके अलावा, spit
function पर एक नज़र डालें।
क्या आप अतिरिक्त स्पष्टता के लिए, अपने प्रश्न में एक उदाहरण फ़ंक्शन कॉल जोड़ सकते हैं? यह opqdonut के जवाब की पुष्टि करने की संभावना है। – Gert
आपके प्रश्न का उत्तर नहीं है, लेकिन इस संदर्भ में दिलचस्प हो सकता है: http://stackoverflow.com/questions/7756909/in-clojure-1-3-how-to-read-and-write-a-file/ 7757674 # 7757674 –