我是Clojure的新手。我正在定义一个包含字符串值的向量。要求是从输入向量中检索由逗号分隔的String值。例如:
(def my-strings ["one" "two" "three"])
我的预期输出应为:
"one", "two", "three"
我尝试了interpose
和join
,如下所示:
(apply str (interpose "," my-strings))
(clojure.string/join "," my-strings)
返回"one,two,three"
,但我需要用双引号""
包围的每个字符串,如上例所示。
答案 0 :(得分:2)
使用map
用引号括住每个字符串,并注意我们如何使用字符文字\"
表示单引号:
(clojure.string/join "," (map #(str \" % \") my-strings))
=> "one","two","three"
但请注意:字符串是""
字符中包含的文本,但引号本身不是字符串的一部分。所以"one,two,three"
输出本身并没有错,除非你真的需要那些围绕文本的额外引号。
答案 1 :(得分:0)
您的预期输出绝不可能是“one”,“two”,“three”。那是什么类型的呢?动态类型不是非类型。但是,当然,你可以把它作为字符串。这个字符串必须以某种方式在repl。
中表示另外请记住,逗号,在Clojure中是空格。
特殊字符,例如“,应该被转义。在这种情况下:\”。
您在repl中看到的引号不是字符串的一部分(除非转义)。字符串是一个,而不是“一个”。如果你想要“one”,你会看到“\”one \“”。
Óscar的答案并不准确。代码不输出那里显示的内容。它输出“\”one \“,\”two \“,\”three \“”。 (您可以在之后添加一个额外的空格,以完全符合您的要求。)。
尽管如此,他的回答是正确:它可以为您提供您想要的内容。它是一个字符串,由一个单词一个组成,用双引号括起来,后面跟一个逗号等。
尝试将吐出到一个文件中。我做了(用逗号后添加了额外的空格)。该文件有:
"one", "two", "three"
干杯 -
P.S。 LightTable很棒!!!
答案 2 :(得分:0)
以下也有诀窍:
(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=>