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

欢迎!请访问关于页面了解更多有关此内容的信息。

0
ClojureScript

在尝试为clojure.lang.LazySeq生成常量时,cljs编译器出错。

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

syms在第3行被定义为LazySeq,然后在第7行被引用。错误包含在refheap中。

似乎可以通过为这种类型生成cljs.core.list来解决此问题。

5 答案

0

评论者:dnolen

您能在哪里精确地识别LazySeq的生成位置吗?LazySeq不是字面量,因此这似乎是宏的bug。我可能是错的。谢谢!

0

评论者:bendlas

LazySeq似乎出现在第7行,即 '~syms形式

`(let [mappings# (into {} (map-indexed #(identity [%2 %1]) '~syms))

Clojure允许嵌入LazySeq: 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
by

评论者:dnolen

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

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