在Clojure中使用宏创建记录

时间:2015-10-27 14:59:07

标签: clojure macros

我想定义一个包含我想在记录中使用的所有值的向量,然后将此向量传递给创建记录的宏。

(def keys ['data1 'data2 'data3])

(defmacro make-record  [n v & body] `(defrecord ~n ~v ~@body))
(make-record VUD vud-keys)
(macroexpand-1 '(make-record TYPE keys)) -> (defrecord TYPE keys)

想要的是:

(macroexpand-1 '(make-record TYPE keys)) -> (defrecord TYPE ['data1 'data2 'data3])

1 个答案:

答案 0 :(得分:2)

看起来你需要在宏扩展期间评估你的参数。 这就是eval的作用。

(def keys '[data1 data2 data3])
(defmacro make-record [name keys]
  `(defrecord ~name ~(eval keys)))