来自邮件列表
http://groups.google.com/group/clojure/msg/c41d909bd58e4534。很容易在不知道的情况下使用已废弃的命名空间或变量。文档警告很小,并且没有编译器警告。
建议:
添加新的 {{\*warn-on-deprecated*}} 动态变量,默认为 false
当加载具有 {{{:deprecated true}}} 的命名空间时,警告到 stderr。
当分析具有 {{{:deprecated true}}} 的变量时,警告到 stderr。
当展开具有 {{{:deprecated true}}} 的宏时,警告到 stderr。
新的系统属性 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 吗?升级的用户可能会看到新的警告,这可能会令人惊讶。
默认情况下应该警告或不应警告废弃的内容吗?