@rich What are your thoughts on the default implementation problem? On Aug 13, 2:17 pm, Rich Hickey <richhic...@gmail.com> wrote: > On Aug 12, 2010, at 7:52 PM, Tim Daly wrote: > > > I find that I'm horribly confused at this point about what a > > protocol "is". Can someone use some other comp. sci. terms to > > define this idea? I thought of them as Java interfaces with > > default methods but clearly I'm wrong. > > Coming from CL, the best analogy is that a protocol is a *named* set > of generic functions that dispatch on the type of their first > argument. When you define a protocol with foo/bar/baz methods you get > generic functions in the protocol's namespace named foo/bar/baz. > > Unlike interfaces, protocols require no derivation. You can extend a > protocol to a particular type by supplying a concrete map of method > names to function objects (extend), *or* the code for same (extend- > type), *or* by supplying definitions for the protocol methods inline > in a deftype/defrecord. The latter *looks* a lot like implementing an > interface, by design it is as easy to use, and might actually involve > implementing an interface under the hood (but that is an > implementation detail, enabled by the naming and first-arg dispatch > restriction). > > Finally, from Java-land, you can get your type to extend a protocol by > deriving from the protocol's corresponding interface. This is what > seems to confuse people most, as if protocols are magic dynamic > interfaces. They are not. They *sometimes* use interfaces in the > implementation, but not always. At no point should one assume that > because a type supports a protocol it 'isA' that protocol (or its > interface). > > Protocols are not about inheritance and that is the key distinction vs > interfaces. > > Hope that helps, > > Rich
-- 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