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" 会造成混淆。

0

评论者:wagjo

已附上补丁

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