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

欢迎!请查阅关于页面以了解如何使用本网站的更多信息。

0
ClojureScript

当尝试为 clojure.lang.LazySeq 类型发出 emit-constant 时,cljs 编译器会产生错误。

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

在这个示例中,syms 在第 3 行被定义为一个 LazySeq,然后在第 7 行被引用。错误包括在 refheap 中。

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

5 个答案

0

评论由:dnolen 提供

你能否准确地指出 LazySeq 在这里的发出位置?LazySeq 不是一个字面量,这在我看来像是一个宏的错误。我可能错了。谢谢!

0

评论由: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?

0

评论由:bendlas 提供

附件patch 0001没有为LazySeq添加一个案例,但将PersistentList和Cons的两种情况合并为一个ISeq。

0

评论由:dnolen 提供

这种做法似乎是可以接受的,但这是一个旧的补丁,我们能否更新为master分支?

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