Clojure 将 var 嵌入 String,另一种方法?喜欢sprintf方式吗?

Clojure embed var to String, a alternative way? Like sprintf way?

 (str "I don't know what " (:name a) " eats."))

我知道这是构造带有变量的字符串的正确方法。 但是有没有类似的方法呢?

(str "I dont know what %s eats." (:name a))

我试过了,这不是有效的语法,但 Clojure 中有类似的方法吗?

谢谢。

format就是你想要的。例如:

(format "I don't know what %s eats." "Joe")

=> "I don't know what Joe eats."

Diego Basch 提到了 format,这是一个很好的答案。您还可以使用 cl-format:

(clojure.pprint/cl-format nil "I don't know what ~a eats." "Joe")

nil作为第二个参数,这个returns是一个字符串。第二个参数的其他选项将导致字符串被写入某处。

format 使用 java.lang.String.formatcl-format 是 Common Lisp 的 format 的 Clojure 版本。对于格式化字符串,它们的功能非常相似,但有几件事 cl-format 可以很好地完成,而 Clojure 的 format 则不能。简单例子——打印nil:

(format "I don't know what %s eats." nil)
;=> "I don't know what null eats."

(clojure.pprint/cl-format nil "I don't know what ~a eats." nil)
;=> "I don't know what nil eats."