Eh, I was afraid the interface would be a problem.  So there isn't a
good way to reuse interface implementations for interacting w/ legacy
Java quite yet.
I do like your approach to the macro better.  As usual you deliver,
Meikel :)

Sean

On Oct 28, 3:11 am, "Meikel Brandmeyer (kotarak)" <m...@kotka.de>
wrote:
> Hi,
>
> since IFn is a Java interface and not a protocol, I'm afraid there is no
> better way to define this. However I would write the macro slightly
> differently. I find this more approachable. YMMV.
>
> (def max-arities 20)
>
> (defmacro definvokable
>   [type fields & deftype-tail]
>   (let [f        (fields 0)
>         args     (repeatedly max-arities gensym)
>         arity    (fn [n]
>                    (let [args (take n args)]
>                      `(invoke [this# ~@args] ((. this# ~f) ~@args))))
>         vararg   `(invoke [this# ~@args more#]
>                     (apply (. this# ~f) ~@args more#))
>         apply-to `(applyTo [this# args#] (apply (. this# ~f) args#))]
>     `(deftype ~type
>        ~fields
>        clojure.lang.IFn
>        ~@(map arity (range (inc max-arities)))
>        ~vararg
>        ~apply-to
>        ~@deftype-tail)))
>
> Sincerely
> Meikel

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to