2024 年 Clojure 状态调查! 中分享您的想法。

欢迎!请在 关于页面 上了解有关此功能的更多详细信息。

0
ClojureScript

ClojureScript 编译器在尝试为 clojure.lang.LazySeq 执行 emit-constant 时出错。

示例: https://www.refheap.com/paste/3901

在第三行定义 syms 作为 LazySeq,然后在第七行对其进行引用。错误包含在 refheap 中。

将 cljs.core.list 发射为此类型似乎可以解决问题。

5 个回答

0

由 dnolen 发表的评论

您能否准确地指出 LazySeq 在此处发出位置?LazySeq 不是一个字面量,因此这看起来像是宏中的错误。我可能是错的。谢谢!

0

由 bendlas 发表的评论

懒序列似乎是在第七行,'~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 吗?

0

由 bendlas 发表的评论

附加的补丁0001没有为LazySeq添加一个情况,但是将PersistentList和Cons的两个情况合并为一个ISeq。

0

由 dnolen 发表的评论

这种方法看起来是可接受的,但这是一个旧的补丁,我们能更新到主分支吗?

0
参考:https://clojure.atlassian.net/browse/CLJS-349(由julienfantin报告)
...