2009-12-03 7 views
5

Zum Beispiel die prxml Funktion druckt XML zu * out *. Ich möchte diese Ausgabe stattdessen als String erfassen. Hier ist die typische Verwendung von einem REPL:Was ist der idiomatische Weg, um Abdrücke * aus * von einer Clojure-Funktion zu erfassen?

user> (prxml [:p "Test"]) 
<p>Test</p>nil 

Ich würde stattdessen tun:

(def xml (capture-out (prxml [:p "Test"]))) 

ich bildete die Capture-out Funktion, aber ich vermute, so etwas wie es existiert, nur habe ich Probleme, es in der API oder Mailing-Liste zu finden.

Antwort

6

Ich habe gerade die mit-out-str aus dieser great blog post detaillierte XML-Verarbeitung in Clojure entdeckt.

So die korrekte Umsetzung von meinem Beispiel ist:

(def xml (with-out-str (prxml [:p "Test"]))) 
6

Allgemeiner gesagt, wenn Sie für with-out-str an der Quelle können Sie sehen, wie dynamisch *out* zu jedem Stream binding mit binden. Dies funktioniert, um den Wert einer vorhandenen Variablen dynamisch festzulegen.