读卡器标记可以与ClojureScript一起使用吗

读卡器标记可以与ClojureScript一起使用吗,clojure,clojurescript,Clojure,Clojurescript,在Clojure中,添加自定义阅读器标记非常简单 ;; 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 namespac

在Clojure中,添加自定义阅读器标记非常简单

;; 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
未定义。我正在使用
leincljsbuildonce
构建项目。这是ClojureScript的一个限制,还是
cljsbuild
在解决读者问题之前构建了项目?在这种情况下,如何在启动cljsbuild之前强制leiningen加载readers命名空间


编辑:请注意,此示例打算在ClojureScript源代码中使用reader标记,而不是在通过
read string

读取辅助数据时使用。在cljs中添加自定义reader标记的机制不同。您必须调用
注册标记解析器接受一个标记和一个fn

从:

你的例子是:

(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."))
这目前是不可能的,但将尽快修复。希望这会很快发生

如果您想这样做,只需将
data\u readers.clj
重命名为
data\u readers.cljc
并使用条件读取器即可

顺便问一下,您的用例是什么


和都是固定的,所以这应该可以正常工作。

我认为
寄存器标记解析器
读取字符串
一起使用。当源代码被处理时,这似乎没有任何效果,我仍然得到相同的错误。嗯,你是对的,
注册标记解析器
不适用于编译器。我打算编写一个宏,以特定的方式处理标记。基本上是删除我在使用ClojureScript/试剂进行开发时的一些样板文件。我尝试通过edn对一些组件进行建模,并成功地使用自定义标记使其更具可读性。由于一些组件是通过edn实现的,其他组件是通过源代码实现的,所以我认为在这两个地方使用相同的语法可能会很有用。然而,仅仅使用一个简单的宏并不是问题,它只是不太对称;;用re-frame我需要写这个<代码>(defn组件[](let[text(subscribe[:i18n:key])](fn[][:div{}@text]))
;;但是我想写这个
(x/defn组件[][:div{}i18n:key])
向量
[:div{}:i18n:key]
可以作为普通数据存储在某个地方,也可以在渲染函数中使用。
(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."))