在数值代码中,通常很有用且符合惯例用增强版本(例如,clojure.core.matrix.operators 以数组的方式定义 +,而不是仅对标量数字)代替 clojure.core 函数。
目前看来,当库这样做时,在客户端代码中似乎没有避免警告的方法,例如:
`
;; 库的命名空间
(ns foo
(:refer-clojure :exclude [+]))
(def + clojure.core/+)
;; 后续在某个其他命名空间中
(require '[foo :refer :all])
=> 警告:+ 已在命名空间:bar 中引用:#'clojure.core/+,正在被替换为:#'foo/+
`
一种解决方案是使用用户命名空间中的 (:refer-clojure :exclude ...),但这会给用户带来不必要的麻烦,并需要维护样板代码。
建议的解决方案是允许变量以附加元数据(例如,^:replace-var)进行注解,将图书馆功能添加到后,将抑制此警告。这将允许库作者指定一个函数应该作为 clojure.core 的替代品(或某个其他命名空间)工作,因此不需要警告。