В Python я могу добавить префикс r
к строковому литералу (необработанной строке), чтобы интерпретатор не переводил специальные символы в строку:
>>> r"abc\nsdf#$%\^"
r"abc\nsdf#$%\^"
Есть ли способ сделать то же самое в Clojure?
В Python я могу добавить префикс r
к строковому литералу (необработанной строке), чтобы интерпретатор не переводил специальные символы в строку:
>>> r"abc\nsdf#$%\^"
r"abc\nsdf#$%\^"
Есть ли способ сделать то же самое в Clojure?
Строки Clojure — это строки Java, и читатель не добавляет ничего существенного к их интерпретации. На на странице для чтения просто написано "поддерживаются стандартные escape-символы 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>
Итак, я думаю, что основной ответ - нет.
Также обратите внимание, что если вы используете против часовой стрелки (плагин Eclipse для Clojure), существует режим, называемый «умная вставка» (отключен по умолчанию), который заботится о правильном экранировании специальных символов при вставке в существующую литеральную строку.
Для таких целей может пригодиться буквальное регулярное выражение.
user=> #"abc\nsdf#$%\^"
#"abc\nsdf#$%\^"
user=> (type #"abc\nsdf#$%\^")
java.util.regex.Pattern
user=> (println (str #"abc\nsdf#$%\^"))
abc\nsdf#$%\^
nil