Re: Generics vs. Message passing: object namespaces
"Matt Knox" <[email protected]> Fri, 23 Feb 2007 15:38:48 -0500
| Newsgroups | gmane.comp.lang.lightweight |
|---|---|
| Message-ID | <[email protected]> |
On 2/23/07, Michael Walter <[email protected]> wrote: > > On 2/23/07, [email protected] <[email protected]> wrote: > > > If I understand it correctly, your point is that if you need the draw > > > method from gun, picture, blood, and duel modules, that in an > > > object-dispatch system, you can say: > > > > > > gun.draw args > > > duel.draw args > > > ...etc. > > > > > > instead of > > > (draw_gun gun args) > > > > > > But it seems that it should be trivial to have, in a CLOS-style > generic > > > function system, 'draw' bound to a function that would look at the > type of > > > its first argument and dispatch to the appropriate GF. Then you'd > have: > > > > > > (draw gun args) > > > ... > > > and the only differences would be syntax and the ease with which > > > autocompletion could be done. > > > > > > Am I missing something? > > > > > > No, I think that is correct, but that is not how CLOS-style generic > > OOP works, the original subject of criticism. [...] > > In what way is using dynamic dispatch not how CLOS-style generic OOP > works? I mean, this seems to be pretty much what defgeneric/defmethod > are for. > > Regards, > Michael > The difference is that if you define 3 different GFs (not different methods on a single gf, but 3 different functions) in different source files, each with the same name, CLOS does not automatically smash them together into a sngle, more generic function. That would be necessary to make (draw gun ) (draw picture) work the same way as gun.draw picture.draw -- (def (eval e l d c) (if (atom? e) ((ahandler (type e)) e l d c) (eval (car e) l d (fun (x) (evapp x (cdr e) l d c)))))