Michiel की बिल्कुल सही काम नहीं करता। जब से मैं अपने जवाब पर एक टिप्पणी में कोड नहीं जोड़ सकते हैं, यहाँ क्या with-out-str
कवर के तहत करता है, तो आप अपने प्रयास के साथ तुलना कर सकते हैं:
user=> (macroexpand-1 '(with-out-str (println "output")))
(clojure.core/let [s__4091__auto__ (new java.io.StringWriter)]
(clojure.core/binding [clojure.core/*out* s__4091__auto__]
(println "output")
(clojure.core/str s__4091__auto__)))
आपका कोड एक चर करने के लिए मौजूदा मानक आउटपुट धारा बाध्यकारी था , उस स्ट्रीम को प्रिंट करना, और फिर चर के माध्यम से अपने मूल्य के लिए धारा पूछना; हालांकि, धारा का मूल्य बिल्कुल बाइट्स नहीं था जो इसे मुद्रित किया गया था। तो with-out-str
एक नव निर्मित StringWriter
से *out*
अस्थायी रूप से बांधता है, और अंत में उस अस्थायी लेखक के स्ट्रिंग मान से पूछताछ करता है।
उत्कृष्ट http://clojuredocs.org/quickref/Clojure%20 कोर साइट से। –