有printf。它直接打印到stdout。
sprintf怎么样,其格式与printf相同,但返回一个没有副作用的字符串?
答案 0 :(得分:15)
在Clojure中,它被称为format并位于clojure.core
:printf
相当于(comp print format)
。
答案 1 :(得分:9)
您应该在cl-format
lib中查看clojure.pprint
。它是Common Lisp的FORMAT函数的一个端口。它可以做Java的printf
不能做的事情,比如条件,迭代seqs等等。
要使用cl-format
回答您的问题,nil
的第一个参数将返回一个字符串; true
的第一个参数将打印到STDOUT。
user> (cl-format nil "~{~R~^, ~}" [1 2 3 4])
"one, two, three, four"
请注意,如果Clojure中不存在format
,您还可以捕获来自Clojure的printf
的输出:
user> (with-out-str (printf "%s" :foo))
":foo"
当库仅提供打印到STDOUT并且您想要捕获输出的函数时, with-out-str
很有用。我遇到过这样做的Java库。
答案 2 :(得分:5)
考虑使用with-out-str宏:
(with-out-str
(print x))
或者只是调用java.lang.String的格式方法:
(String/format "%d" 3)