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 报告)
...