C'è printf. Stampa direttamente su stdout.Clojure sprintf?
Che ne dici di sprintf, che formatta allo stesso modo di printf, ma restituisce una stringa senza effetti collaterali?
C'è printf. Stampa direttamente su stdout.Clojure sprintf?
Che ne dici di sprintf, che formatta allo stesso modo di printf, ma restituisce una stringa senza effetti collaterali?
In Clojure si chiama format e risiede in clojure.core
: printf
equivale a (comp print format)
.
Si consiglia di verificare cl-format
, nel clojure.pprint
lib. È una porta della funzione FORMAT del Common Lisp. Si può fare cose che Java printf
non può fare, come condizionali, iterazione su seguenti del regolamento provvisorio, ecc
Per rispondere alla tua domanda, con cl-format
, un primo argomento di nil
restituirà una stringa; un primo argomento di true
verrà stampato su STDOUT.
user> (cl-format nil "~{~R~^, ~}" [1 2 3 4])
"one, two, three, four"
Nota che se format
non esistessero già in Clojure, si potrebbe anche catturare l'output da Clojure di printf
come questo:
user> (with-out-str (printf "%s" :foo))
":foo"
with-out-str
è utile quando una libreria fornisce solo una funzione che le stampe a STDOUT e vuoi invece catturare l'output. Ho attraversato librerie Java che lo fanno.
Si consiglia di utilizzare la con-out-str macro:
(with-out-str
(print x))
O semplicemente chiamare il metodo format di java.lang.String:
(String/format "%d" 3)
queste librerie Java non scriveranno clojure di \ * fuori \ *, lo faranno? Avresti bisogno di dirottare System/setOut con un PrintWriter che usa la var. – gtrak