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

欢迎!有关本站如何运作的更多信息,请参阅关于 页面。

0
错误

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

更糟的是,类型提示没有被识别

user=> (.contains ^java.util.Collection [] 0) 反射警告,NO_SOURCE_PATH:1:1 - 方法 contains 在 clojure.lang.IPersistentVector 中无法解析(没有这样的方法)。 false user=> (.contains ^java.util.Collection [(inc 1)] 0) 反射警告,NO_SOURCE_PATH:1:1 - 方法 contains 在 clojure.lang.IPersistentVector 中无法解析(没有这样的方法)。 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 - 方法 contains 在 clojure.lang.IPersistentVector 中无法解析(没有这样的方法)。 false user=> (.contains [1] 0) false user=> (.contains ^:foo [1] 0) 反射警告,NO_SOURCE_PATH:1:1 - 方法 contains 在 clojure.lang.IPersistentVector 中无法解析(没有这样的方法)。 false user=> (.contains [(inc 1)] 0) 反射警告,NO_SOURCE_PATH:1:1 - 方法 contains 在 clojure.lang.IPersistentVector 中无法解析(没有这样的方法)。 false

0

评论:bronsa

我正在重新打开这个工单,因为在我更改示例之后,该票据现在是有效的 —— 最糟糕的是,我意识到即使使用显式的类型提示也无法消除反射

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