(def a) 销毁# 'a元数据,请检查这个
(def ^:mykey a 1)
(meta #'a) ; ;; 好的,:mykey 存在
(let [v (def a)]
[(meta v) ;  URING :mykey present, metadata destroyed]
(identical? v #'a) ;;;; true, 我们在谈论同一个var
])
(meta #'a) ; ;; :mykey 不存在
如果这不是一个错误而是一个“功能”,那么我们至少有两个问题
1- def特殊形式的文档根本没有任何定义此行为,需要澄清。根据目前的文档,似乎没有初始化参数的def None 就会没有任何副作用,这对于var元数据来说并不正确。
2- defmulti使用此形式查找变量,并检查它是否已经绑定到MultiFn,如果已经绑定,则defmulti不做任何事情...但实际上做了一些事情,在(原本不应销毁的数据)检查中,defmulti将销毁原始变量元数据。此涉及的defmulti片段是:
(let [v# (def ~mm-name)]
(when-not (and (.hasRoot v#) (instance? clojure.lang.MultiFn (deref v#))))
...