What I think Kevin meant to say was that you might consider using a macro.

If you have questions about specifics, please do reply. This group is here to 
Help, and it would be a shame if a response like the previous one steered you 
away from asking a follow-up.

Sent via mobile

On Jul 8, 2011, at 5:14 PM, Kevin Downey <redc...@gmail.com> wrote:

> if only lisp had macros
> 
> On Fri, Jul 8, 2011 at 12:16 PM, David Jagoe <davidja...@gmail.com> wrote:
>> 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 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
> 
> 
> 
> -- 
> And what is good, Phaedrus,
> And what is not good—
> Need we ask anyone to tell us these things?
> 
> -- 
> 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

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