Подтвердить что ты не робот

Имеет ли clojure необработанную строку?

В Python я могу префикс r в строковый литерал (необработанная строка), чтобы сообщить интерпретатору не переводить специальные символы в строке:

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

Есть ли способ сделать то же самое в Clojure?

4b9b3361

Ответ 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