欢迎!请参阅 关于页面 了解更多关于这是如何工作的信息。
更新:我已经将此作为一个问题报告了:https://clojure.atlassian.net/jira/software/c/projects/CLJS/issues/CLJS-3294
我正在尝试编写一个库,该库提供一组标签化字面量(及其读取函数),这些字面量可以从 Clojure 和 Clojurescript 中使用。
data_readers.cljc
{foo/bar my.project.foo/bar}
my/project/foo.cljc
(ns my.project.foo) (defn bar [x] #?(:clj (str "hello! " x) :cljs (clj->js x)))
命令行
clj --main cljs.main -e "(println #foo/bar \"world\")"
打印 "hello, world"
Clojurescript 编译并执行了 bar 读取函数中的 :clj 分支 - 就我所能看到的,在读取器中无法执行 cljs 代码。我还尝试了一个只含 cljs 文件 my/project/foo.cljs(即仅包含 cljs 的文件) - 但这也不起作用。
my/project/foo.cljs
我已经尝试过使用一种替代方案,其中读取器函数返回一个表单,请参考 https://github.com/henryw374/time-literals/blob/master/src/time_literals/data_readers.cljc,这大致上工作得很好,但是那些读取函数在用来与 Clojure 配合(例如 clojure.core/read-string)时不再工作 - 请参考 https://github.com/henryw374/time-literals/issues/3
谢谢,Henry
这是ClojureScript中的一个bug。Clojure支持在data_readers.cljc中使用读取器条件,ClojureScript也应该这样做。 Tickets: https://clojure.atlassian.net/jira/software/c/projects/CLJS/issues/CLJS-3294