I've just started learning protocols, deftype, etc. The first thing I
did was try to extend a Clojure type (maps) to operate as a
specialized Java Swing interface (AttributeSet), forgetting that
interfaces are not protocols; i.e.
(extend-type clojure.lang.PersistentArrayMap
javax.swing.text.AttributeSet
(getAttribute [this k]
(get this k)))
Is there any way of doing what is intended here: get Clojure maps to
implement Java's AttributeSet? I've seen Chas Emerick's flowchart,
but I'm still trying to wrap my head around all the choices.
On Fri, Feb 10, 2012 at 3:13 AM, drewn <naylor...@gmail.com> wrote: > I've just started learning protocols, deftype, etc. The first thing I > did was try to extend a Clojure type (maps) to operate as a > specialized Java Swing interface (AttributeSet), forgetting that > interfaces are not protocols; i.e.
On Fri, Feb 10, 2012 at 1:07 PM, Aaron Cohen <aa...@assonance.org> wrote: > On Fri, Feb 10, 2012 at 3:13 AM, drewn <naylor...@gmail.com> wrote: >> I've just started learning protocols, deftype, etc. The first thing I >> did was try to extend a Clojure type (maps) to operate as a >> specialized Java Swing interface (AttributeSet), forgetting that >> interfaces are not protocols; i.e.
which will work in the specific case that you want "a Clojure map that implements a particular Java interface". Records behave partially as Clojure maps. For more general mixins, proxy, reify, and deftype are your friends, and even gen-class may be needed in some instances.
I considered using that, but I need to do something more with the
constructor (e.g. convert the map into a Java array for internal
use). Also, defrecords only takes positional arguments, which will be
hard to use with tens of arguments. (An alternative is just to pass
in one argument as a map itself, but that seems to defeat the
purpose.)
On Feb 10, 10:32 am, Cedric Greevey <cgree...@gmail.com> wrote:
> On Fri, Feb 10, 2012 at 1:07 PM, Aaron Cohen <aa...@assonance.org> wrote:
> > On Fri, Feb 10, 2012 at 3:13 AM, drewn <naylor...@gmail.com> wrote:
> >> I've just started learning protocols, deftype, etc. The first thing I
> >> did was try to extend a Clojure type (maps) to operate as a
> >> specialized Java Swing interface (AttributeSet), forgetting that
> >> interfaces are not protocols; i.e.
> which will work in the specific case that you want "a Clojure map that
> implements a particular Java interface". Records behave partially as
> Clojure maps. For more general mixins, proxy, reify, and deftype are
> your friends, and even gen-class may be needed in some instances.