为什么会这样:
`(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)
最佳答案
因为clojure defmacro loses metadata ,因为 ^
是一个读取器宏。
并且 :private
是 symbol metadata ,所以它丢失了。
查看第一个链接上问题的答案以获取解决方案。
关于clojure - 为什么 `(def ^ :private name 1 ) eval to (def namespace/name 1)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20904915/