我有一个用于创建哈希映射的宏。我应该发送一个混搭的名称和调用函数获得的内容(在这个例子中它是一个函数 xx)。
(defmacro data-for-mashup [mashup-name func]
`(map {} {:title :content} {~mashup-name (~@func)}))
宏应该有任何混搭名称和任何功能,这就是我希望它成为宏的原因。
Wnen 我称之为我希望结果看起来像这样
{:title "Events Mashup"
:content [{ :event-name "event name 1"
:performer "performer 1"
:date "date 1"
:start-time "start time 1"
:end-time "end time 1"}
{:event-name "event name 2"
:performer "performer 2"
:date "date 2"
:start-time "start time 2"
:end-time "end time 2"}]}
内容标签的值实际上是地图的向量。
调用宏应该得到这样的结果
(data-for-mashup "events" (xx))
在 REPL 我得到这个结果
(["events" #<datamodel$xx mashup_dsl.datamodel$xx@530f0fbd>])
macroexpand-1 导致这个
(macroexpand-1 `(data-for-mashup "events" (xx)))
(clojure.core/map {} {:title :content} {"events" mashup-dsl.datamodel/xx})
( xx 是我命名空间中的一个函数。)
事实上,我希望它扩展到这个
(map {} {:title :content} {"events" (xx)})
我究竟做错了什么?