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

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 что-то подобное этому? Я понимаю, что " обрабатывает многострочный тон, но я хочу, чтобы он также корректно обрабатывал \ как литерал.

Спасибо!

4b9b3361

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