Имеется printf. Он печатает непосредственно на stdout.
Как насчет sprintf, который форматирует то же самое, что и printf, но возвращает строку без побочных эффектов?
Ответ 1
В Clojure он называется format и находится в clojure.core: printf эквивалентно (comp print format).
Ответ 2
Вы должны проверить cl-format, в clojure.pprint lib. Это порт Common Lisp FORMAT. Он может делать то, что не может выполнить Java printf, например, условные выражения, итерация по seqs и т.д.
Чтобы ответить на ваш вопрос, cl-format, первый аргумент nil вернет строку; первый аргумент true будет печатать в STDOUT.
Обратите внимание, что если format еще не существует в Clojure, вы также можете записать вывод из Clojure printf следующим образом:
user> (with-out-str (printf "%s" :foo))
":foo"
with-out-str полезно, когда библиотека предоставляет только функцию, которая печатает в STDOUT, и вы хотите записать результат. Я использую библиотеки Java, которые это делают.
Ответ 3
Рассмотрим использование макроса with-out-str:
(with-out-str
(print x))
Или просто вызовите метод java.lang.String format: