28

我想要的是

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

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 有类似的东西吗?我意识到可以"很好地处理多行,但我希望它也可以\作为文字正确处理。

谢谢!

4

3 回答 3

20

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

(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")

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

于 2015-03-27T13:07:35.080 回答
13

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

"hello \\
there \\
world "

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

编辑 :

既然您已经澄清您不想转义\字符,恐怕Clojure 没有提供转义字符的特殊语法,这个问题之前已经问过了。本质上,Clojure 处理与 Java 相同的字符串语法,没有可用的特殊语法。

于 2012-06-16T15:23:21.747 回答
5

如果你真的想这样做,把你的文字字符串放在一个 txt 文件中,然后用 clojure 把它弄好。

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

如果您想让它可热插拔,请将其放入函数中。

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

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

于 2016-09-16T19:51:56.413 回答