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(旧式)移动到 argvec(新式)。

0 投票

评论由:gshayban 提出

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

0 投票

评论由:wagjo 提出

附上补丁

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