为什么`(def ^:private name 1)eval to(def namespace / name 1)?

时间:2014-01-03 13:36:52

标签: clojure

为什么这样:

`(def ^:private name 1 )

评估为:

(def namespace/name 1) 

而不是这个:

(def ^:private namespace/name 1) 

我只是想写一个小宏:

(defmacro def- [name val] `(def ^:private ~name ~val))

但它扩展为:

(macroexpand-1 `(def- foo 12))
=> (def namespace/foo 12)

1 个答案:

答案 0 :(得分:2)

因为clojure defmacro loses metadata,因为^是读者宏。

:privatesymbol metadata,所以它丢失了。

在解决方案的第一个链接上查看问题的答案。