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

欢迎!请参阅关于页面,以了解该平台的工作方式。

0
Clojure

编译器对于IPersistentCollection文字的可能的类型有很多假设,这是理所当然的。这个情况的奇怪之处在于,一旦定义了count,获取(常数)值就有效,但将其用作参数时,会导致关闭分发以发出各种文字的空变体。

> (deftype T [] clojure.lang.IPersistentCollection (count [_] 0) > (def ^:const t (T.)) > (meta t) java.lang.UnsupportedOperationException: Unknown Collection type Compiler.java:2860 clojure.lang.Compiler$EmptyExpr.emit Compiler.java:3632 clojure.lang.Compiler$InvokeExpr.emitArgsAndCall ...

编辑:在调查后更新了票据
注意:附上的测试补丁甚至没有实现(deftype)的(count (链接: )),这只会触发正当的AbstractMethodError

4 个答案

0

评论者:bendlas

测试中有个别字,抱歉了。

0

评论者:alexmiller

看起来像是CLJ-1093的一个变种。

0

评论者:bendlas

尽管CLJ-1093已标记为1.8已修复,但此错误仍然存在于1.8中。

0
参考: https://clojure.atlassian.net/browse/CLJ-1575(由bendlas报告)
...