在 Clojure 宏中访问参数的元数据

noz*_*iar 3 macros clojure

有没有办法在不使用 的情况下检索 clojure 宏内参数的元数据eval?到目前为止我唯一能想到的是:

(def ^{:a :b} my-var)

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

(my-macro my-var)
;; Prints {:a :b, :name my-var, ...}
Run Code Online (Sandbox Code Playgroud)

noz*_*iar 5

我最终找到了一个解决方案:

(def ^{:a :b} my-var)

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

(my-macro my-var)
;; Prints {:a :b, :name my-var, ...}
Run Code Online (Sandbox Code Playgroud)

所以这里的关键部分是使用resolve函数来获取与符号关联的 var。