来自邮件列表
http://groups.google.com/group/clojure/msg/c41d909bd58e4534。在使用已废弃的命名空间或变量时不知不觉中就会使用。文档警告很小,并且没有编译器警告。
*建议:*
*添加新的 {{\*warn-on-deprecated*}} 动态变量,默认为 false
*当加载{{{:deprecated true}}}命名空间时向标准错误输出警告。
*当分析{{{:deprecated true}}}变量时向标准错误输出警告。
*当展开{{{:deprecated true}}}宏时向标准错误输出警告。
*新系统属性 Clojure.compiler.warn-on-deprecated
*使用 clojure.compiler.warn-on-deprecated 编译 Clojure 自身
*修复 Clojure 内部的废弃警告(replicate, clear-agent-errors)
*使用 :deprecation 标记将 clojure.parallel 标记为已废弃
示例
(set! *warn-on-deprecated* true)
;; 已废弃变量的使用(在编译时)
(defn ^:deprecated f [x] x)
(f 5)
;;=> 废弃警告,NO_SOURCE_PATH:7:1 : 变量 #'user/f 已废弃
;; 已废弃宏的使用(在宏展开时)
(defmacro ^:deprecated m [x] x)
(m 5)
;;=> 废弃警告,NO_SOURCE_PATH:7:1 : 宏 #'user/m 已废弃
;; 已废弃命名空间的使用(在加载时)
(ns foo {:deprecated "1.1"})
(ns bar (:require foo))
;;=> 废弃警告:加载已废弃的命名空间 `foo` 来自命名空间 `bar`
*补丁:* 706-deprecated-ns-var-warnings-tested-3.diff
*问题:* 应将废弃警告的默认值设置为 true 吗?正在升级的用户可能会看到新的警告,可能会感到意外。
*默认情况下是否应警告废弃内容或不警告?