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

欢迎!请查看 关于 页面了解更多关于如何使用本站的信息。

+3
编译器

当前字面量中的类型提示在运行时丢失

`
user=> (set! warn-on-reflection true)
true
user=> (fn [x] (java.util.HashMap. ^java.util.Map {"foo" x}))
反射警告,null:1:9 - 调用 java.util.HashMap 构造函数无法解析。

function[user/eval7479/fn--7480]

`

当前有效的解决方案是引入一个局部变量并对绑定进行类型提示

`
user=> (fn [x] (let [^java.util.Map m {"foo" x}] (java.util.HashMap. m)))

function[user/eval7487/fn--7488]

`

附带的补丁通过跟踪字面量值的类型提示来修复此问题,即使在原始情况下也能使反射消失

`
user=> (set! warn-on-reflection true)
true
user=> (fn [x] (java.util.HashMap. ^java.util.Map {"foo" x}))

function[user/eval7479/fn--7480]

`

方法: 保护字面量集合中的用户提示
补丁: 0001-CLJ-1929-preserve-type-hints-in-literals.patch

1 个答案

0
参考资料: https://clojure.atlassian.net/browse/CLJ-1929 (由 glts 提出)
...