欢迎!请访问关于页面了解更多有关此内容的信息。
在尝试为clojure.lang.LazySeq生成常量时,cljs编译器出错。
示例: https://www.refheap.com/paste/3901
syms在第3行被定义为LazySeq,然后在第7行被引用。错误包含在refheap中。
似乎可以通过为这种类型生成cljs.core.list来解决此问题。
评论者:dnolen
您能在哪里精确地识别LazySeq的生成位置吗?LazySeq不是字面量,因此这似乎是宏的bug。我可能是错的。谢谢!
评论者:bendlas
LazySeq似乎出现在第7行,即 '~syms形式
`(let [mappings# (into {} (map-indexed #(identity [%2 %1]) '~syms))
Clojure允许嵌入LazySeq: https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Compiler.java#L4538
顺便说一句:相关的协议不是字面量,而是print-dup多方法。我们应该在CLJS中有print-dup吗?
附带的补丁0001没有为LazySeq添加一个案例,而是将PersistentList和Cons的两个案例折叠成了一个ISeq的案例。
这种做法似乎是可以接受的,但这是一个旧补丁,我们能否更新到master分支?