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