在Clojure宏中访问参数元数据

3
有没有一种方法可以在不使用eval的情况下检索Clojure宏中参数的元数据?到目前为止,我能想到的唯一方法是:
(def ^{:a :b} my-var)

(defmacro my-macro [s] (prn (eval `(meta (var ~s)))))

(my-macro my-var)
;; Prints {:a :b, :name my-var, ...}
1个回答

5
我找到了一个解决方案:
(def ^{:a :b} my-var)

(defmacro my-macro [s] (prn (meta (resolve s))))

(my-macro my-var)
;; Prints {:a :b, :name my-var, ...}

因此,关键部分在于使用resolve函数来获取与符号相关联的变量。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接