2011-08-22 15 views
6

से कैप्चर करना मैं stdout पर मुद्रित कुछ डेटा कैप्चर करने के लिए आउट-आउट-स्ट्र का उपयोग कर रहा हूं। समस्या यह है कि आउट-आउट-स्ट्र को मेरे फ़ंक्शन से रिटर्न वैल्यू फेंकना प्रतीत होता है। क्या कोई तरीका है कि मैं दोनों को पकड़ सकता हूं? मैं अपना केक रखना चाहता हूं और इसे भी खाऊंगा।"मूल" वापसी मूल्य को आउट-आउट-स्ट्र

उदाहरण:

(with-out-str (do (prn "test") (+ 1 1))) 
+0

आप किस वापसी मूल्य का जिक्र कर रहे हैं? '2'' (+ 1 1) 'मूल्यांकन से लौट आया? – seh

उत्तर

8

की परिभाषा Aping कोर लाइब्रेरी की with-out-str मैक्रो, तो आप इस तरह इसी तरह की एक निर्धारित कर सकते हैं:

(defmacro with-out-str-and-value 
    [& body] 
    `(let [s# (new java.io.StringWriter)] 
    (binding [*out* s#] 
     (let [v# [email protected]] 
     (vector (str s#) 
       v#))))) 
the values function from Common Lisp बिना

और उसके multiple function return values, यहाँ हम एक वेक्टर वापसी बजाय; पहला आइटम मानक आउटपुट से एकत्रित पाठ है, और दूसरा आइटम शरीर के रूप का मूल्यांकन करके मूल्य लौटाया जाता है।

संबंधित मुद्दे