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