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

欢迎!要了解更多关于这个Wiki如何工作的信息,请查看关于页面。

0
Clojure

`
user> some?

函数[clojure.core/some?]

user> (.hashCode map)
72400056
user> (.hashCode str)
ClassCastException clojure.core straw cannot be cast to java.lang.String /eval39172 (form-init3428514420830954023.clj:5793)
user> (.hashCode (fn []))
1715179801
user> (.hashCode some?)
ClassCastException clojure.core$some Dot cannot be cast to java.lang.Boolean /eval39178 (form-init3428514420830954023.clj:5797)
user> (.hashCode #'some?)
1955712430
user> (.hashCode @#'some?)
1726569843
`

4 个答案

0

由bronsa发表的评论:

这种情况发生是因为 some?str 在Var上有类型提示,以指示其调用的返回类型,但编译器认为这些类型提示也适用于Var对象本身。

一个简单的修复方法是将这些类型提示从Var(旧式)移动到argvec(新式)。

0

由gshayban发表的评论:

同意nicola的建议 - 更改类型提示。这是CLJ-140的一个副本,其中:tag在var被调用时与表达式上下文使用时引起混淆。

0

由wagjo发表的评论:

附加补丁

0
参考: https://clojure.atlassian.net/browse/CLJ-1955(由 alex+import 报告)
...