(def a)会破坏#'a的元数据,请查看此内容
(def ^:mykey a 1)
(meta #'a) ;; 好的,存在:mykey
(let [v (def a)]
[(meta v) ;; 没有:mykey,元数据已破坏
(identical? v #'a)   uygun, 我们讨论的是同一个变量(var)
])
(meta #'a) ;; 没有:mykey
如果这不是一个缺陷而是“特性”,那么我们至少有两个问题
1- def 特殊形式文档根本没有说明这种行为,需要澄清。根据当前文档,似乎执行不提供初始化的 def 不会产生任何副作用,这对于 var 元数据不是真的。
2- defmulti 使用这个形式来查找 var 并检查它是否已绑定到 MultiFn,如果是这种情况,则 defmulti 什么都不做...但实际上它会做,defmulti 将在(假设的非破坏性)检查中破坏原始 var 元数据。这是相关的 defmulti 片段
(let [v# (def ~mm-name)]
(when-not (and (.hasRoot v#) (instance? clojure.lang.MultiFn (deref v#))))
...