欢迎!请参阅 关于页面 获取有关如何使用此功能的一些更多信息。
当尝试为 clojure.lang.LazySeq 类型生成 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 允许懒序列(lazy-seqs)嵌套: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?