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

欢迎!请参阅关于页面以获取关于其工作方式的一些更多信息。

+3
data.xml
重新标记

编码或解码XML命名空间名称需要反射吗?这次反射在"definline"中,可能会遇到不期望的头风。

这是在clojure.data.xml 0.2.0-alpha6,这是我在Maven Central上看到的最新版本;以及OpenJDK 11。

程序

(set! *warn-on-reflection* true)
(require '[clojure.data.xml :as data.xml])

输出

Reflection warning, clojure/data/xml/jvm/name.clj:35:1 - call to static method decode on java.net.URLDecoder can't be resolved (argument types: unknown, java.lang.String).
Reflection warning, clojure/data/xml/jvm/name.clj:38:1 - call to static method encode on java.net.URLEncoder can't be resolved (argument types: unknown, java.lang.String).

我认为将"unknown"的第一个参数类型提示为String应该是安全和高效的。有问题的URLEncoder/URLDecoder方法是重载的,但所有签名都要求第一个参数是String。

2 个答案

0
0
by

实际上无法在像这样内联的函数中做类型提示(在内联时你得到的是词法值,这些值可能是一个不能包含元数据的字符串),所以真正简单的修复方案就是停止使用内联函数(也不确定这是否是一个好的需要)。

...