2

ハッシュマップを作成するためのマクロがあります。マッシュアップの名前と、関数を呼び出して取得したコンテンツ (この例では関数 xx) を送信する必要があります。

(defmacro data-for-mashup [mashup-name func]  
`(map  {} {:title :content} {~mashup-name (~@func)}))  

マクロは、任意のマッシュアップ名と任意の関数を取得する必要があるため、マクロにしたかったのです。

私がそれを呼び出すとき、私は結果がこのように見えるようにしたい

{: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"}]}

content タグの値は、実際にはマップのベクトルです。

マクロを呼び出すと、次のような結果が得られるはずです

(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)})  

私は何を間違っていますか?

4

2 に答える 2