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 不是文字量,我觉得这可能是宏中的错误。我可能错了。谢谢!

0

评论者:bendlas

Lazy seq 似乎是第 7 行的 '~syms 表达式中引入的

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

Clound 允许嵌套使用 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报告)
...