8

我是 Clojure 的新手。我正在定义一个包含字符串值的向量。要求是从输入向量中检索以逗号分隔的字符串值。例如:

(def my-strings ["one" "two" "three"])

我的预期输出应该是:

"one", "two", "three" 

我试过了interposejoin如下图:

(apply str (interpose "," my-strings))
(clojure.string/join "," my-strings)

两者都返回"one,two,three",但我需要每个字符串都用双引号括起来"",就像我上面的例子一样。

4

3 回答 3

4

用引号将每个字符串括起来,并注意我们如何使用字符文字map来表示单引号:\"

(clojure.string/join "," (map #(str \" % \") my-strings))
=> "one","two","three"

但请注意:字符串是包含在""字符中的文本,但引号本身不是字符串的一部分。所以"one,two,three"输出本身并没有错,除非你真的需要那些围绕文本的额外引号。

于 2013-07-16T14:21:23.730 回答
1

以下也可以解决问题:

(let [strs ["one" "two" "three"]]
  (println
    ;;              outer quote       strings    outer quote
    (apply str (flatten [\" (interpose "\",\"" strs) \"]))))

输出:

user=> (let [strs ["one" "two" "three"]] (println (apply str (flatten [\" (interpose "\",\"" strs) \"]))))
"one","two","three"
nil
user=>
于 2013-07-17T07:06:57.220 回答
1

您的预期输出绝不可能是"one", "two", "three"。那会是什么类型呢?动态类型不是无类型。但是,当然,您可以将其作为字符串。这个字符串必须以某种方式在 repl 中表示。

另外请记住,逗号,在 Clojure 中是空格。

特殊字符,如“,应被转义。在这种情况下:\”。

您在 repl 中看到的引号不是字符串的一部分(除非转义)。字符串是one,而不是"one"。如果你想要"one",你会看到"\"one\""

奥斯卡的答案并不准确。该代码不输出那里显示的内容。它输出"\"one\",\"two\",\"three\""。(您可以在 之后添加一个额外的空格,以完全符合您的要求。)。

尽管如此,他的回答是正确的:它给了你你想要的东西。它是一个字符串,由一个用双引号括起来的单词组成,后跟一个逗号等。

尝试将其到文件中。我做到了(在逗号后添加额外的空格)。该文件有:

"one", "two", "three"

干杯 -

PS LightTable 太棒了!!!

于 2013-07-17T06:04:37.687 回答