what-a-guy a écrit :
> (defmacro dlg [dlgid# & fields#]
> `(fn [parent# layout#]
> ~@(map
> (fn [[f# id# text# type#]]
> `(fld parent# layout# '~id# ~text# ~type#))
> fields#)))
>
> (def inp '(dlg "test"
> (field fld-1 "Field number one" (JTextField.))
> (field fld-2 "Field number two" (JTextField.))))
>
> (macroexpand inp)
>
> ;; =>
> ;; (fn* ([parent__6 layout__7]
> ;; (user/fld parent__4 layout__5 (quote fld-1) "Field number
> one" (JTextField.))
> ;; (user/fld parent__4 layout__5 (quote fld-2) "Field number
> two" (JTextField.))))
>
All parent# symbols will expand to the same symbol only if they are all
inside the same backquote. When it's not the case you have to resort to
explicit gensyming:
(defmacro dlg [dlgid# & fields#]
(let [parent (gensym "parent")]
`(fn [~parent layout#]
~@(map
(fn [[f# id# text# type#]]
`(fld ~parent layout# '~id# ~text# ~type#))
fields#))))
Christophe
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
-~----------~----~----~----~------~----~------~--~---