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