reader 标签可以与 ClojureScript 一起使用吗
Can reader tags be used with ClojureScript
在 Clojure 中,添加自定义 reader 标签非常简单
;; data_readers.clj (on classpath, eg. src/clj/)
{rd/qux datareaders.reader/my-reader}
;; Define a namespace containing the my-reader var:
(ns datareaders.reader)
(defn my-reader [x] 'y)
;; use special tag in other namespace. Readers have to be required first.
(require 'datareaders.reader)
(defn foo [x y]
(println #rd/qux x "prints y, not x due to reader tag."))
我正在尝试为 ClojureScript 实现相同的功能,但收到 #rd/qux
未定义的错误。我正在使用 lein cljsbuild once
来构建项目。这是 ClojureScript 的限制还是 cljsbuild
在 reader 解决之前构建项目?在那种情况下,如何在 cljsbuild 启动之前强制 leiningen 加载 readers 命名空间?
编辑:请注意,此示例打算在 ClojureScript 源代码中使用 reader 标记,而不是在通过 read-string
.
读取辅助数据时使用
在 cljs 中添加自定义 reader 标签的机制不同。您必须调用带有标签和 fn 的 register-tag-parser!
。
(testing "Testing tag parsers"
(reader/register-tag-parser! 'foo identity)
(is (= [1 2] (reader/read-string "#foo [1 2]")))
你的例子是:
(cljs.reader/register-tag-parser! 'rd/qux (fn [x] 'y))
(defn foo [x y]
(println #rd/qux x "prints y, not x due to reader tag."))
这目前是不可能的,但一旦 #CLJS-1194 and #CLJS-1277 被修复就会。希望这会很快发生。
如果您想这样做,只需将 data_readers.clj
重命名为 data_readers.cljc
并使用条件读取器。
顺便说一句,你的用例是什么?
两个 #CLJS-1194 and #CLJS-1277 都已修复,因此这应该会按预期工作。
在 Clojure 中,添加自定义 reader 标签非常简单
;; data_readers.clj (on classpath, eg. src/clj/)
{rd/qux datareaders.reader/my-reader}
;; Define a namespace containing the my-reader var:
(ns datareaders.reader)
(defn my-reader [x] 'y)
;; use special tag in other namespace. Readers have to be required first.
(require 'datareaders.reader)
(defn foo [x y]
(println #rd/qux x "prints y, not x due to reader tag."))
我正在尝试为 ClojureScript 实现相同的功能,但收到 #rd/qux
未定义的错误。我正在使用 lein cljsbuild once
来构建项目。这是 ClojureScript 的限制还是 cljsbuild
在 reader 解决之前构建项目?在那种情况下,如何在 cljsbuild 启动之前强制 leiningen 加载 readers 命名空间?
编辑:请注意,此示例打算在 ClojureScript 源代码中使用 reader 标记,而不是在通过 read-string
.
在 cljs 中添加自定义 reader 标签的机制不同。您必须调用带有标签和 fn 的 register-tag-parser!
。
(testing "Testing tag parsers"
(reader/register-tag-parser! 'foo identity)
(is (= [1 2] (reader/read-string "#foo [1 2]")))
你的例子是:
(cljs.reader/register-tag-parser! 'rd/qux (fn [x] 'y))
(defn foo [x y]
(println #rd/qux x "prints y, not x due to reader tag."))
这目前是不可能的,但一旦 #CLJS-1194 and #CLJS-1277 被修复就会。希望这会很快发生。
如果您想这样做,只需将 data_readers.clj
重命名为 data_readers.cljc
并使用条件读取器。
顺便说一句,你的用例是什么?
两个 #CLJS-1194 and #CLJS-1277 都已修复,因此这应该会按预期工作。