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

欢迎!请参阅关于页面以获取更多有关该功能的详细信息。

0
Clojure

`
user> some?

函数[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 会在 var 被调用时与表达式上下文造成混淆

0

评论由:wagjo发表

贴上了补丁

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