Clojure Long Literal String

时间:2012-06-16 15:20:27

标签: clojure

我想要什么

某些编程语言具有创建多行文字字符串的功能,例如:

some stuff ... <<EOF
  this is all part of the string
  as is this
  \ is a literal slash
  \n is a literal \ followed by a literal n
  the string ends on the next line
EOF

问题:Clojure有类似的东西吗?我意识到"处理多行罚款,但我希望它也能正确处理\作为文字。

谢谢!

3 个答案:

答案 0 :(得分:15)

您可能对这个小功能感兴趣。

(defn long-str [& strings] (clojure.string/join "\n" strings))

你会这样使用

(long-str "This is the first line. Implicitly I want a new line"
          "When I put a new line in the function call to create a new line")

这确实需要额外的双引号,但会更接近你想要的。

答案 1 :(得分:11)

如果字符串中需要\个字符,请将其转义。您无需执行任何其他操作来支持多行字符串,例如:

"hello \\
there \\
world "

=> "hello \\\nthere \\\nworld"

编辑:

既然你已经澄清了你不想逃避\字符,我担心Clojure没有提供转义字符的特殊语法,这被问到{{3} }。从本质上讲,Clojure使用与Java相同的字符串语法,没有特殊的语法。

答案 2 :(得分:3)

如果你真的想这样做,请将你的文字字符串放在一个txt文件中,然后用clojure将其弄清楚。

(def my-string (slurp "super_long_string.txt"))

如果你想让它可以热插拔,可以在功能中啜饮它。

(defn my-string [] (slurp "something.sql"))

这样,每次更改原始字符串时,都会通过调用(my-string)自动获取程序中的当前值。