来自邮件列表
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 : var #'user/f is deprecated
;; 宏展开时使用已弃用的宏
(defmacro ^:deprecated m [x] x)
(m 5)
;;=> 弃用警告,NO_SOURCE_PATH:7:1 : macro '#'user/m is deprecated
;; 加载时使用已弃用的命名空间
(ns foo {:deprecated "1.1"})
(ns bar (:require foo))
;;=> 弃用警告:从命名空间 `bar` 中加载已弃用的命名空间 `foo`
**补丁:** 706-deprecated-ns-var-warnings-tested-3.diff
**问题:** 弃用警告的默认值是否应该是 true?升级的用户可能会看到新的警告,可能会令人惊讶。
**默认应该是警告或什么都不警告吗?