Clojure sprintf? - PullRequest
       1

Clojure sprintf?

11 голосов
/ 28 августа 2010

Есть печать. Он печатает прямо на стандартный вывод.

Как насчет sprintf, который форматирует так же, как printf, но возвращает строку без побочных эффектов?

Ответы [ 3 ]

15 голосов
/ 28 августа 2010

В Clojure это называется формат и находится в clojure.core: printf эквивалентно (comp print format).

9 голосов
/ 28 августа 2010

Вы должны проверить 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"

Обратите внимание, что если * Closes не существует format, вы можете также захватить вывод из printf Clojure следующим образом:

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

with-out-str полезно, когда библиотека предоставляет только функцию, которая печатает в STDOUT, и вместо этого вы хотите захватить вывод.Я столкнулся с библиотеками Java, которые делают это.

5 голосов
/ 28 августа 2010

Рассмотрите возможность использования макроса with-out-str:

(with-out-str
    (print x))

Или просто вызовите метод формата java.lang.String:

(String/format "%d" 3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...