在 Clojure 中使用宏创建记录
Creating records using macro in Clojure
我想用我想在我的记录中使用的所有值定义一个向量,然后将该向量传递给创建我的记录的宏。
(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])
看来您需要在宏展开期间评估参数。
这就是 eval
所做的。
(def keys '[data1 data2 data3])
(defmacro make-record [name keys]
`(defrecord ~name ~(eval keys)))
我想用我想在我的记录中使用的所有值定义一个向量,然后将该向量传递给创建我的记录的宏。
(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])
看来您需要在宏展开期间评估参数。
这就是 eval
所做的。
(def keys '[data1 data2 data3])
(defmacro make-record [name keys]
`(defrecord ~name ~(eval keys)))