在Clojure中将字符串与向量连接时双引号

时间:2012-01-02 17:12:57

标签: string vector clojure

在Clojure中,代码(println ["foo" "bar"])打印以下内容:

[foo bar]

代码(println (str "items: " ["foo" "bar"]))打印以下内容:

items: ["foo" "bar"]

注意向量中每个项目的双引号。我怎么能避免这个?我需要一个函数将字符串与向量的字符串表示形式连接起来,产生这个输出:

items: [foo bar]

我怎么能在Clojure中做到这一点?

2 个答案:

答案 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]"