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

评论由:bronsa 提出

我重新开启这个话题,因为现在票是有效的,因为我已经更改了例子 -- 更糟糕的是,我注意到即使有显式的类型提示,也无法去除反射

0
...