来自邮件列表
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)
;; overloaded 过时的变量(在编译时)
(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 吗?那些正在升级的人可能会看到新的警告,可能会使他们感到惊讶。
**默认是应该警告还是不警告过时的问题?