Ok. I understand. So, if you want to do some programming that generates insances, it should be done with symbols, at the macro-level?
On Mon, Jul 12, 2010 at 10:01 AM, Meikel Brandmeyer <m...@kotka.de> wrote: > Hi, > > On Jul 12, 10:44 am, Nicolas Oury <nicolas.o...@gmail.com> wrote: > > > After playing a bit with protocols I found this (which seems odd to me): > > > > (All of this on clojure-1.2.0-master-SNAPSHOT, downloaded with lein - i > > don't know how recent it is) > > > > user> (defprotocol Foo (foo [x] )) ; We define a protocol Foo > > user> (def bar {:foo Foo}) ; We hide it in a record > > #'user/bar > > user> (= (:foo bar) Foo) ; It's still equal to itselffrom > > true > > user> (extend Object (:foo bar) {:foo (fn [x] :bar)}) ; We extend it > > nil > > user> (foo 5) ; It works > > :bar > > user> (= (:foo bar) Foo) ; it's not equal to itself anymore > > false > > > > By the way, if you look at the extenders of each: > > user> (extenders (:foo bar)) > > nil > > user> (extenders Foo) > > (java.lang.Object) > > > > Foo is extended but not its copy. > > > > Is it what it is supposed to do? > > I think this is the expected way. Since clojure emphasises > immutability you don't modify a Protocol by extending it to some type, > instead you get back a new version of it extending to the type. > Multimethods work similarly, IIRC. > > Your previously stored version of the protocol is the old one, which > is not extended. Hence the nil on the extenders call. (foo 5) however > sees the new protocol and hence does the right thing. > > This is backed solely by a gut feeling of mine, but I would not be > surprised if it were close to the truth. > > Sincerely > Meikel > > -- > 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<clojure%2bunsubscr...@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