请在Clojure 2024 年调查问卷中分享您的想法!

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

0
错误

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

更糟糕的是,类型提示无法被拾取

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

0
已回答

评论者:bronsa

我重新打开了这个工单,因为现在随着示例的改变,工单实际上是有效的 —— 更糟糕的是,我注意到即使使用显式类型提示,也无法去除反射。

0
已回答
参考:[https://clojure.atlassian.net/browse/CLJ-1326](https://clojure.atlassian.net/browse/CLJ-1326)(由 bronsa 报告)
...