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

欢迎!请参阅 关于 页面以了解更多关于此功能的信息。

+1
ClojureScript
编辑
 => (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

by
感谢托马斯!在ClojureScript中能阅读Clojure代码吗?
by
是的,请参阅org.clojure/tools.reader包和cljs.tools.reader命名空间。始终在可以使用ClojureScript时可用,因为ClojureScript本身就需要用到它。
...