Thanks for your response Devin.

I guess I had come to the same conclusion by the end of my email. But
I wonder if there is a more direct way of achieving the same thing
without using a macro that spits out a defrecord with in-line method
declarations? I had a quick look at the defrecord code and didn't
follow well enough to see what machinery is being used internally to
extend the record to the java interface.

In short: why can I implement java interfaces within a defrecord body
but not when using extend?


Cheers,
David

On 9 July 2011 02:35, Devin Walters <dev...@gmail.com> wrote:
> 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

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