16

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

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

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

4

3 回答 3

15

Clojure 字符串是 Java 字符串,读者不会对其解释添加任何重要内容。阅读器页面只是说“支持标准 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> 

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

于 2012-06-15T01:09:19.190 回答
5

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

于 2012-06-15T11:58:38.300 回答
2

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

user=> #"abc\nsdf#$%\^"
#"abc\nsdf#$%\^"
user=> (type #"abc\nsdf#$%\^")
java.util.regex.Pattern
user=> (println (str #"abc\nsdf#$%\^"))
abc\nsdf#$%\^
nil
于 2012-06-15T09:34:12.487 回答