【问题标题】:Accessing argument's metadata in Clojure macro在 Clojure 宏中访问参数的元数据
【发布时间】:2015-06-06 06:18:24
【问题描述】:

有没有一种方法可以在不使用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, ...}

【问题讨论】:

    标签: clojure macros


    【解决方案1】:

    我最终找到了解决方案:

    (def ^{:a :b} my-var)
    
    (defmacro my-macro [s] (prn (meta (resolve s))))
    
    (my-macro my-var)
    ;; Prints {:a :b, :name my-var, ...}
    

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

    【讨论】:

      猜你喜欢
      • 2019-06-09
      • 1970-01-01
      • 2011-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-12
      • 2013-12-10
      相关资源
      最近更新 更多