2010-08-28 12 views
11

Es gibt printf. Es druckt direkt auf stdout.Clojure sprintf?

Wie wäre es mit sprintf, das genauso formatiert wie printf, aber eine Zeichenfolge ohne Nebenwirkungen liefert?

Antwort

15

In Clojure heißt es format und residiert in clojure.core: printf entspricht (comp print format).

9

Sie sollten cl-format, in der clojure.pprint Lib überprüfen. Es ist ein Port von Common Lisp FORMAT Funktion. Es kann Dinge tun, die Java printf nicht tun können, wie conditionals, über ASTA Iterieren, usw.

Ihre Frage zu beantworten, mit cl-format, ein erstes Argument von nil einen String zurück; Ein erstes Argument von true wird auf STDOUT gedruckt.

user> (cl-format nil "~{~R~^, ~}" [1 2 3 4]) 
"one, two, three, four" 

Beachten Sie, dass, wenn format nicht bereits in Clojure existieren, können Sie auch die Ausgabe von Clojure des printf wie dies erfassen konnte:

user> (with-out-str (printf "%s" :foo)) 
":foo" 

with-out-str hilfreich ist, wenn eine Bibliothek bietet nur eine Funktion, die Drucke zu STDOUT und Sie möchten stattdessen die Ausgabe erfassen. Ich habe Java-Bibliotheken durchsucht, die das tun.

+0

diese Java-Libs nicht zu clojure SCHREIB \ * out \*, werden sie? Sie müssten System/setOut mit einem PrintWriter, der die var verwendet, entführen. – gtrak

5

Betrachten Sie die mit-out-str Makro weiter:

(with-out-str 
    (print x)) 

Oder nur Methode java.lang.String das Format nennen:

(String/format "%d" 3)