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 代码。我还尝试了一个只含 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也应该这样做。 Tickets: https://clojure.atlassian.net/jira/software/c/projects/CLJS/issues/CLJS-3294

...