在Clojure中,代码(println ["foo" "bar"])
打印以下内容:
[foo bar]
代码(println (str "items: " ["foo" "bar"]))
打印以下内容:
items: ["foo" "bar"]
注意向量中每个项目的双引号。我怎么能避免这个?我需要一个函数将字符串与向量的字符串表示形式连接起来,产生这个输出:
items: [foo bar]
我怎么能在Clojure中做到这一点?
答案 0 :(得分:4)
在您的示例中,您实际上不需要对str
进行字符串连接调用,因为println
可以使用多个参数。以下在Clojure 1.3.0下运行良好:
user=> (println "items: " ["foo" "bar"])
items: [foo bar]
nil
修改强>
我重新阅读了这个问题,我意识到Otavio不仅打算使用这个例子进行打印来说明他从str
打印的问题,而且他确实打算通过连接要打印的字符串。
建议以下内容:
(println
(binding [*print-readably* nil]
(str "items: " ["foo" "bar"])))
输出:
items: [foo bar]
nil
<强>参考强>
来自Clojure网站的文档:Other Useful Functions and Macros“:
“... *print-readably*
(默认为true)绑定到nil,导致字符串打印时没有引号或任何转义字符编码,字符打印时没有前导'\',或任何转义字符编码。“
答案 1 :(得分:1)
这应该这样做。
user=> (require 'clojure.string)
nil
user=> (clojure.string/join " " ["foo" "bar"])
"foo bar"
user=> (str "[" (clojure.string/join " " ["foo" "bar"]) "]")
"[foo bar]"