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