Clojure sprintf?

时间:2010-08-28 19:05:49

标签: clojure printf

有printf。它直接打印到stdout。

sprintf怎么样,其格式与printf相同,但返回一个没有副作用的字符串?

3 个答案:

答案 0 :(得分:15)

在Clojure中,它被称为format并位于clojure.coreprintf相当于(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)