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

欢迎!有关如何使用本网站的更多信息,请参阅 关于 页面。

0
ClojureScript

当尝试为 clojure.lang.LazySeq 发射 emit-constant 时,cljs 编译器出现错误。

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

在第 3 行中将 syms 定义为一个 LazySeq,然后在第 7 行对其进行了引用。错误包含在 refheap 中。

为这种类型发射 cljs.core.list 似乎可以解决这个问题。

5 个答案

0

评论由: dnolen

您能精确指出 LazySeq 在哪里被发射吗?LazySeq 不是字面量,所以我感觉这是一个宏的 bug。我可以做错。谢谢!

0

评论由: bendlas

惰性序列似乎是在第 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 吗?

0

评论由: bendlas

附加的补丁 0001 没有为 LazySeq 添加一个案例,而是将 PersistentList 和 Cons 的两个案例折叠到一个 ISeq 的案例中。

0

评论由: dnolen

这种方法似乎是可以接受的,但是这是一个旧的补丁,我们可以更新到主分支吗?

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