clojure有原始字符串吗?

时间:2012-06-15 00:53:21

标签: clojure escaping rawstring

在Python中,我可以在r前加上一个字符串文字(原始字符串),以告诉解释器不要翻译字符串中的特殊字符:

>>> r"abc\nsdf#$%\^"
r"abc\nsdf#$%\^"

有没有办法在Clojure中做同样的事情?

3 个答案:

答案 0 :(得分:15)

Clojure字符串是Java字符串,读者不会添加任何重要的解释。 The reader page只是说“支持标准的Java转义字符”。

你可以逃避\

user> (print "abc\\nsdf#$%\\^")
abc\nsdf#$%\^

这只影响阅读器读取的字符串文字,因此如果您从文件中读取字符串,则读者永远不会看到它们:

user> (spit "/tmp/foo" "abc\\nsdf#$%\\^")
nil
user> (slurp "/tmp/foo")
"abc\\nsdf#$%\\^"
user> (print (slurp "/tmp/foo"))
abc\nsdf#$%\^nil
user> 

所以,我认为基本答案是否定的。

答案 1 :(得分:5)

请注意,如果您使用的是逆时针(用于Clojure的Eclipse插件),则有一种称为“智能粘贴”的模式(默认情况下禁用),当您粘贴到现有内容时,它会正确转义特殊字符。文字字符串。

答案 2 :(得分:2)

可用于此类目的的文字正则表达式。

user=> #"abc\nsdf#$%\^"
#"abc\nsdf#$%\^"
user=> (type #"abc\nsdf#$%\^")
java.util.regex.Pattern
user=> (println (str #"abc\nsdf#$%\^"))
abc\nsdf#$%\^
nil