在数值代码中,用增强版本替换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(或另一个命名空间)的插入式替代品使用,并且因此不需要警告。