无需在Clojure中使用引号即可轻松处理文本?

时间:2013-04-20 01:03:04

标签: string clojure escaping read-eval-print-loop

我正在使用REPL中的文本解析,有时希望将一堆数据转储成字符串,无论是bibtex条目还是某些EBNF表示法等。通常字符串中可能有引号,不得不手动逃避它们,这非常繁琐且容易出错..

是否有另一种方法可以做到这一点,例如Ruby的%Q|I可以使用"Quotation Marks"|heredocs等?或者是否可以编写宏或修改阅读器以启用此功能?

2 个答案:

答案 0 :(得分:0)

关于更强大的引用语法已经some discussion,但是没有任何更改可以支持这一点。

与此同时,要专门处理您提到的REPL交互,您可能会发现这很有用。请注意,它可能对每个REPL都不起作用 - 它们并非都非常支持read-line

(defn read-lines []
  (->> (repeatedly read-line)
       (take-while #(not= % "."))
       (mapcat #(list % "\n"))
       (apply str)))

通过在REPL上运行(read-lines),粘贴内容,然后添加一行.来使用它:

user=> (read-lines)
  #_=> This "works"
  #_=> sometimes...
  #_=> .
"This \"works\"\nsometimes...\n"
user=> (print *1)
This "works"
sometimes...
nil

答案 1 :(得分:-1)

如何简单地使用转储文本的临时文件,然后使用slup从那里读取它?这样,只要你打电话,一切都会自动转义?

(slurp "tempfile.txt")

(def data (slurp "tempfile.txt"))

(defn rd [] (def data (slurp "tempfile.txt")))