我在 REPL 中进行文本解析,有时想将一堆数据转储到一个字符串中,无论是 bibtex 条目还是一些 EBNF 符号等。通常字符串中可能有引号,而且非常繁琐且容易出错,必须手动转义它们..
是否有另一种方法可以做到这一点,例如 Ruby 的%Q|I
可以使用"Quotation Marks"|
等heredocs
?或者是否可以编写一个宏或修改阅读器来启用它?
我在 REPL 中进行文本解析,有时想将一堆数据转储到一个字符串中,无论是 bibtex 条目还是一些 EBNF 符号等。通常字符串中可能有引号,而且非常繁琐且容易出错,必须手动转义它们..
是否有另一种方法可以做到这一点,例如 Ruby 的%Q|I
可以使用"Quotation Marks"|
等heredocs
?或者是否可以编写一个宏或修改阅读器来启用它?
已经有一些关于更健壮的引用语法的讨论,但似乎没有任何更改来支持这一点。
同时,要专门处理您提到的 REPL 交互,您可能会发现这很有用。请注意,它可能不适用于那里的每个 REPL——它们并不是都支持read-line
得非常好:
(定义读取行 [] (->> (反复读行) (take-while #(not= % ".")) (mapcat #(list % "\n")) (应用str)))
通过(read-lines)
在 REPL 上运行,粘贴您的内容,然后单独添加一行来使用.
它:
用户=>(阅读行) #_=> 这个“有效” #_=> 有时... #_=> 。 "这\"有效\"\n有时...\n" 用户=>(打印 *1) 这个“有效” 有时... 零
如何简单地使用一个临时文件,将文本转储到其中,然后使用slup
. 这样一来,每当您调用它时,一切都会自动转义?
(slurp "tempfile.txt")
或者
(def data (slurp "tempfile.txt"))
或者
(defn rd [] (def data (slurp "tempfile.txt")))