My understanding is that old (previously constructed) instances of a
record follow the old implementation. To get the new behavior after
recompiling a record you must construct a new instance.

On Aug 26, 10:51 am, Armando Blancas <armando_blan...@yahoo.com>
wrote:
> I ran your sequence without redefining Foo and got 20 instead of 1/5.
> I don't know how that redefinition affects the evaluation of bar.
>
> Clojure 1.2.0
> user=> (defprotocol Foo (bar [this x]))
> Foo
> user=> (defrecord fooed [] Foo (bar [this x] (* 2 x)))
> user.fooed
> user=> (extend-type Object Foo (bar [this x] (/ 2 x)))
> nil
> user=> (def fooey (fooed.))
> #'user/fooey
> user=> (bar fooey 10)
> 20
>
> On Aug 25, 8:55 am, DeverLite <derby.lit...@gmail.com> wrote:
>
>
>
> > So if I do this in a clean REPL
>
> > Clojure 1.2.0
> > user=> (defprotocol Foo (bar [this x]))
> > Foo
> > user=> (defrecord fooed [] Foo (bar [this x] (* 2 x)))
> > user.fooed
> > user=> (defprotocol Foo (bar [this x]))
> > Foo
> > user=> (extend-type Object Foo (bar [this x] (/ 2 x)))
> > nil
> > user=> (def fooey (fooed.))
> > #'user/fooey
> > user=> (bar fooey 10)
> > 1/5
> > user=> (defrecord fooed [] Foo (bar [this x] (* 2 x)))
> > user.fooed
> > user=> (def fooey (fooed.))
> > #'user/fooey
> > user=> (bar fooey 10)
> > 20
>
> > I would have expected 20 the first call to bar to be 20.
>
> > This is a natural sequence of lines to execute if you---for
> > instance--- have Foo defined in file A and fooed in file B, and you
> > then add a default implementation using extend-type in file A and then
> > recompile file A.
>
> > This scenario is easily fixed by recompiling file B (as the last few
> > lines demonstrate).
>
> > I don't see any easy way to actually fix this behavior (though my
> > understanding of how protocols are implemented is largely based on
> > seeing how they behave and my limited knowledge of the JVM, rather
> > than actually looking at the code), but it does seem like it would be
> > less surprising if it could be accomplished.
>
> > Thoughts? Should I post this as a ticket in assembla?

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