是否有Clojure的原始字符串?(Does clojure have raw string?)

2019-06-25 12:15发布

在Python,我可以前缀一个r到一个字符串(原始字符串)来告诉解释不是字符串翻译中的特殊字符:

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

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

Answer 1:

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> 

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



Answer 2:

另请注意,如果你使用逆时针(Clojure的用于Eclipse插件),有一个模式,所谓的“智能贴”(默认禁用)这需要的,当你粘贴现有文本字符串中正确转义特殊字符的照顾。



Answer 3:

可使用的为这种目的的字面正则表达式。

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


文章来源: Does clojure have raw string?