【问题标题】:Double quotes when concatenating a string with a vector in Clojure在 Clojure 中将字符串与向量连接时的双引号
【发布时间】:2012-01-02 17:12:56
【问题描述】:

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

[foo bar]

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

items: ["foo" "bar"]

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

items: [foo bar]

如何在 Clojure 中做到这一点?

【问题讨论】:

  • 嗨 Otavio,我已经修改了我的答案 - 我希望它对你有用!

标签: string vector clojure


【解决方案1】:

在您的示例中,您实际上并不需要对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,这会导致打印字符串时不带引号或任何转义字符编码,并且打印字符时不带前导 '\' 或任何转义字符编码。”

【讨论】:

  • 使用 str 函数时,["foo" "bar"] 向量被转换为字符串 "[\"foo\" \"bar\"]"
【解决方案2】:

应该这样做。

user=> (require 'clojure.string)        
nil
user=> (clojure.string/join " " ["foo" "bar"])
"foo bar"
user=> (str "[" (clojure.string/join " " ["foo" "bar"]) "]")
"[foo bar]"

【讨论】:

    猜你喜欢
    • 2012-07-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2010-10-13
    • 2014-11-22
    相关资源
    最近更新 更多