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
...