Clojure Длинные строковые строки
Что я хочу
Некоторые языки программирования имеют функцию создания многострочных литералов, например:
some stuff ... <<EOF
this is all part of the string
as is this
\ is a literal slash
\n is a literal \ followed by a literal n
the string ends on the next line
EOF
Вопрос: Имеет ли Clojure что-то подобное этому? Я понимаю, что "
обрабатывает многострочный тон, но я хочу, чтобы он также корректно обрабатывал \
как литерал.
Спасибо!
Ответы
Ответ 1
Вас может заинтересовать эта небольшая функция.
(defn long-str [& strings] (clojure.string/join "\n" strings))
Вы бы так же использовали
(long-str "This is the first line. Implicitly I want a new line"
"When I put a new line in the function call to create a new line")
Это требует дополнительных двойных кавычек, но будет ближе к тому, что вы хотите.
Ответ 2
Если вам нужен символ \
в строке, просто откройте его. Вам не нужно ничего делать для поддержки многострочных строк, например:
"hello \\
there \\
world "
=> "hello \\\nthere \\\nworld"
EDIT:
Теперь, когда вы выяснили, что вы не хотите скрывать символ \
, я боюсь, что Clojure не предлагает специальный синтаксис для экранирования символов, это было задано Перед. По сути, Clojure имеет дело с тем же строковым синтаксисом, что и Java, без специального синтаксиса.
Ответ 3
Если вы действительно хотите это сделать, поместите свою литеральную строку в txt файл и разделите ее на clojure.
(def my-string (slurp "super_long_string.txt"))
Если вы хотите, чтобы он был с возможностью "горячей" замены, выполните его в функции.
(defn my-string [] (slurp "something.sql"))
Таким образом, каждый раз, когда вы меняете исходную строку, вы автоматически получаете ее текущее значение в своей программе, вызывая (my-string)
.