2009-12-03 1 views
5

Par exemple, la fonction prxml imprime XML vers * out *. Je voudrais plutôt capturer cette sortie en tant que chaîne. Voici l'utilisation typique d'un REPL:Quelle est la manière idiomatique de capturer des impressions à * sortir * à partir d'une fonction Clojure?

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

Je place aime faire:

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

J'ai fait la fonction de capture-out, mais je soupçonne que quelque chose comme ça existe, seulement j'ai du mal à le trouver dans le API ou la liste de diffusion.

Répondre

6

Je viens de découvrir le avec-out-str à partir de ce great blog post détaillant le traitement XML dans Clojure.

Ainsi, la mise en œuvre correcte de mon exemple est:

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

Plus généralement, si vous regardez la source de with-out-str vous pouvez voir comment lier dynamiquement *out* à un flux en utilisant binding. Cela fonctionne pour définir dynamiquement la valeur de toute variable existante.

Questions connexes