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

欢迎!请查看关于页面以获取有关如何工作的更多信息。

0
Clojure

`
user> some?

function[clojure.core/some?]

user> (.hashCode map)
72400056
user> (.hashCode str)
ClassCastException clojure.core$str无法转换成java.lang.String /eval39172 (form-init3428514420830954023.clj:5793)
user> (.hashCode (fn []))
1715179801
user> (.hashCode some?)
ClassCastException clojure.core$someQMARK无法转换成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在变量被调用与在表达式上下文中使用时会导致混淆。

0

评论人:wagjo

附上补丁

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