Hay printf. Imprime directamente en stdout.Clojure sprintf?
¿Qué hay de sprintf, que formatea de la misma manera que printf, pero devuelve una cadena sin efectos secundarios?
Hay printf. Imprime directamente en stdout.Clojure sprintf?
¿Qué hay de sprintf, que formatea de la misma manera que printf, pero devuelve una cadena sin efectos secundarios?
En Clojure se llama format y reside en clojure.core
: printf
es equivalente a (comp print format)
.
Debe consultar cl-format
, en el clojure.pprint
lib. Es un puerto de la función de Common Lisp FORMAT. Se puede hacer cosas que Java de printf
no se puede hacer, como condicionales, interactuando sobre SEQs, etc.
Para responder a su pregunta, con cl-format
, un primer argumento de nil
devolverá una cadena; un primer argumento de true
se imprimirá en STDOUT.
user> (cl-format nil "~{~R~^, ~}" [1 2 3 4])
"one, two, three, four"
Tenga en cuenta que si format
no existen ya en Clojure, también se puede capturar la salida de Clojure de printf
así:
user> (with-out-str (printf "%s" :foo))
":foo"
with-out-str
es útil cuando una biblioteca sólo proporciona una función que imprime a STDOUT y desea capturar la salida en su lugar. Me encontré con bibliotecas de Java que hacen esto.
Considere el uso de la macro con la salida-str:
(with-out-str
(print x))
O simplemente llamar al método formato de java.lang.String:
(String/format "%d" 3)
esas librerías de Java no escribirán a clojure de \ * a cabo \*, ¿lo harán? Debería secuestrar System/setOut con PrintWriter que usa la var. – gtrak