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

欢迎!请查看关于页面以获取更多有关此工作方式的信息。

0
错误

user=> (set! *warn-on-reflection* true) true user=> (.contains [] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false user=> (.contains [1] 0) false user=> (.contains ^:foo [1] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false user=> (.contains [(inc 1)] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false

更糟糕的是,类型提示无法被检测到

user=> (.contains ^java.util.Collection [] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false user=> (.contains ^java.util.Collection [(inc 1)] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false user=> (.contains ^java.util.Collection (identity [(inc 1)]) 0) false

类似问题也适用于其他字面量

4 个答案

0

评论者:alexmiller

这不是公共API,看起来不值得捣鼓。

0

评论者:bronsa

Clojure 集合至少已经文档化以实现 java.util.Collection,因此以下展示相同确切问题的示例应该是有效的

user=> (set! *warn-on-reflection* true) true user=> (.contains [] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false user=> (.contains [1] 0) false user=> (.contains ^:foo [1] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false user=> (.contains [(inc 1)] 0) 反射警告,NO_SOURCE_PATH:1:1 - 无法解析调用 clojure.lang.IPersistentVector 的方法 contains (没有此方法)。 false

0
by

评论者:bronsa

由于我已经更改了示例,因此票据现在是有效的,而我注意到即使使用显式的类型提示也无法去除反射类型

0
by
参考:https://clojure.atlassian.net/browse/CLJ-1326(由bronsa报告)
...