Hi All,

I am battling with how to deal with the difference between Protocols
and Interfaces in a particular case.

Consider the following code:

(defrecord DomainTypeA []
  SomeInternalProtocol
  (foo [this] "foo result")

  clojure.lang.IFn
  (invoke [this] "invoke result"))

This code works fine.

However, I have a number of domain types all of which must use the
same implementation of foo and invoke.

In the case off foo its easy:

(defrecord DomainTypeA [])
(extend DomainTypeA SomeInternalProtocol internal-protocol-implementation-map)

However I cannot do:

(extend DomainTypeA clojure.lang.IFn some-implementation)

because IFn is a java Interface. How would I get arount this?

My use case is as follows:

Every one of my domain objects needs to implement invoke in the same
way, so I don't want to code it in-line on the record definition each
time. The implementation is defined in one place and I eventually want
a macro (e.g. defdomainobj but with a better name!) that would
automatically hook up the IFn def.

Hmm maybe I just answered my own question:

Should I just write the macro that spits out the code in my first listing?

Thanks!

Cheers,
David

-- 
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

Reply via email to