2024 Clojure状态调查!中分享您的想法。

欢迎!有关如何使用此问答页面的更多信息,请参阅关于页面。

+1
 => (cljs.reader/read-string "(re-matches #\".*ClojureScript \\d+\\.\\d+\\.\\d+ (.*)$\")")

Error: Unsupported escape character: \d.
    at new cljs$core$ExceptionInfo (/js/cljs-runtime/cljs.core.js:37198:10)
    at Function.eval [as cljs$core$IFn$_invoke$arity$3] (/js/cljs-runtime/cljs.core.js:37259:9)
    at Function.eval [as cljs$core$IFn$_invoke$arity$2] (/js/cljs-runtime/cljs.core.js:37255:26)
    at Function.eval [as cljs$core$IFn$_invoke$arity$variadic] (/js/cljs-runtime/cljs.tools.reader.impl.errors.js:52:25)
    at Function.eval [as cljs$core$IFn$_invoke$arity$variadic] (/js/cljs-runtime/cljs.tools.reader.impl.errors.js:92:47)
    at Object.cljs$tools$reader$impl$errors$throw_bad_escape_char [as throw_bad_escape_char] (/js/cljs-runtime/cljs.tools.reader.impl.errors.js:321:51)
    at Object.cljs$tools$reader$edn$escape_char [as escape_char] (/js/cljs-runtime/cljs.tools.reader.edn.js:470:38)
    at eval (/js/cljs-runtime/cljs.tools.reader.edn.js:485:39)
    at cljs$tools$reader$edn$read_string_STAR_ (/js/cljs-runtime/cljs.tools.reader.edn.js:488:3)

但在clojure中的相同输入

=> (read-string "(re-matches #\".*ClojureScript \\d+\\.\\d+\\.\\d+ (.*)$\")")

(re-matches #".*ClojureScript \d+\.\d+\.\d+ (.*)$")

此外

(cljs.reader/read-string "(re-matches #\"hello\")")

用cljs.reader/read-string无法读取,而clojure read-string可以读取

1 答案

+3
 
最佳答案

cljs.reader是一个纯EDN读取器。正则表达式(例如#"")不是EDN的一部分,因此读取失败。它在使用clojure.edn/read-string时也会失败。如果您想读取源代码,可以直接使用tools-reader

感谢Thomas!在ClojureScript中是否有阅读Clojure代码的东西?
是的,参见org.clojure/tools.reader包和cljs.tools.reader命名空间。在使用ClojureScript时始终可用,因为ClojureScript自身也在使用它。
...