Hi,
On Feb 8, 11:45 am, Roman Roelofsen <[email protected]>
wrote:
> just for practicing Clojure's macros I wrote the following
> create-java-list macro.
>
> (defmacro create-java-list
> [& forms]
> (let [prefixfn (fn [obj form] (cons (symbol ".") (cons obj form)))
> lname (gensym)]
> `(let [~lname (java.util.ArrayList.)]
> ~@(map (partial prefixfn lname) forms)
> ~lname)))
>
> The idea is that you can write
>
> (let [javalist (create-java-list
> (add "1")
> (add "2"))]
> (prn javalist))
>
> instead of
>
> (let [javalist (java.util.ArrayList.)]
> (.add javalist "1")
> (.add javalist "2")
> (prn javalist))
>
> Is it possible to create the macro without the (gensym) call? I wasn't
> able to use something like lname#.
You can use ->.
(defmacro create-java-list
[& forms]
(let [predot (fn [form] (cons (symbol ".") form))]
`(let [lname# (java.util.ArrayList.)]
(-> lname#
~@(map predot forms)))))
which is maybe better written as
(let [jl (-> (java.util.ArrayList.)
(.add "1")
(.add "2"))]
(prn jl))
I don't see a compelling reason for such a macro. At least not in this
simple case.
Sincerely
Meikel
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
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