欢迎!请查阅关于页面以了解如何使用本网站的更多信息。
当尝试为 clojure.lang.LazySeq 类型发出 emit-constant 时,cljs 编译器会产生错误。
示例: https://www.refheap.com/paste/3901
在这个示例中,syms 在第 3 行被定义为一个 LazySeq,然后在第 7 行被引用。错误包括在 refheap 中。
似乎通过为这种类型发出 cljs.core.list 可以解决这个问题。
评论由:dnolen 提供
你能否准确地指出 LazySeq 在这里的发出位置?LazySeq 不是一个字面量,这在我看来像是一个宏的错误。我可能错了。谢谢!
评论由:bendlas 提供
Lazy seq 似乎是第 7 行的 '~syms 表达式引入的
`(let [mappings# (into {} (map-indexed #(identity [%2 %1]) '~syms))
Clojure 允许在懒序列中嵌入懒序列:https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/Compiler.java#L4538
顺便说一句:相关的协议不是字面量,而是 print-dup 多方法。我们是否需要在 CLJS 中有 print-dup?
附件patch 0001没有为LazySeq添加一个案例,但将PersistentList和Cons的两种情况合并为一个ISeq。
这种做法似乎是可以接受的,但这是一个旧的补丁,我们能否更新为master分支?