2011-08-22 13 views
6

Używam with-out-str do przechwytywania niektórych danych, które są drukowane na standardowe wyjście. Problem polega na tym, że out-str wydaje się wyrzucać wartość zwrotu z mojej funkcji. Czy jest jakikolwiek sposób, aby uchwycić oba? Chciałbym zjeść moje ciasto i je zjeść.Przechwytywanie "oryginalnej" wartości zwracanej z-out-str

Przykład:

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

Jaką wartość zwrotną się powołujesz? "2" powrócił z oceny '(+ 1 1)'? – seh

Odpowiedz

8

małpuje definicję rdzeń biblioteki with-out-str makro, można zdefiniować podobną jak poniżej:

(defmacro with-out-str-and-value 
    [& body] 
    `(let [s# (new java.io.StringWriter)] 
    (binding [*out* s#] 
     (let [v# [email protected]] 
     (vector (str s#) 
       v#))))) 

Bez the values function from Common Lisp i jego multiple function return values tu wrócimy wektor zamiast; pierwszym elementem jest tekst zebrany ze standardowego wyjścia , a drugim elementem jest wartość zwrócona przez ocenę formy ciała.

Powiązane problemy