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

欢迎!请参阅 关于 页面以了解有关此信息的工作原理的更多信息。

+1
ClojureScript
编辑

更新:我已将此问题作为一个问题提出: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 代码。我还尝试了有一个 my/project/foo.cljs(即只有 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

1 答案

0

这是 ClojureScript 中的一个 bug。Clojure 支持在 data_readers.cljc 中使用读取条件,ClojureScript 也应该做同样的事情。任务 https://clojure.atlassian.net/jira/software/c/projects/CLJS/issues/CLJS-3294

...