Thread: [cedet-eieio] More default methode issues
Brought to you by:
zappo
From: Frank <som...@gm...> - 2010-06-05 07:41:08
|
Hi, This looks like a glitch to me. (require 'eieio) (defclass foo () ()) (defmethod func (this) (message "func default %s" this)) (defmethod func :before ((this foo)) (message "func foo :before %s" this)) ;; (defmethod func :primary ((this foo)) ;; (message "func foo :primary %s" this) ;; 123) (defmethod func :after ((this foo)) (message "func foo :after %s" this)) ;; This one is probably OK. (func (make-instance 'foo)) ;; Must be wrong as a methode which is bound for class foo is called! ;; I assume the default methode should be called. (func 666) |
From: Frank <som...@gm...> - 2010-06-06 20:05:23
|
Frank schrieb: > Hi, > > This looks like a glitch to me. > > > (require 'eieio) > > (defclass foo () > ()) > > (defmethod func (this) > (message "func default %s" this)) > > (defmethod func :before ((this foo)) > (message "func foo :before %s" this)) > > ;; (defmethod func :primary ((this foo)) > ;; (message "func foo :primary %s" this) > ;; 123) > > (defmethod func :after ((this foo)) > (message "func foo :after %s" this)) > > ;; This one is probably OK. > (func (make-instance 'foo)) > > ;; Must be wrong as a methode which is bound for class foo is called! > ;; I assume the default methode should be called. > (func 666) > I think I have to correct myself a bit; (func 666) is probably not supposed to call the default method as 666 is not an (eieio) object here; (It should throw an error instead!!??) Considering we add this (defclass any () ()) Then this calls the default method as expected (func (make-instance 'any)) |
From: Eric M. L. <er...@si...> - 2010-06-11 00:41:27
|
On 06/06/2010 04:05 PM, Frank wrote: > Frank schrieb: > >> (func (make-instance 'foo)) >> >> ;; Must be wrong as a methode which is bound for class foo is called! >> ;; I assume the default methode should be called. >> (func 666) >> > I think I have to correct myself a bit; > (func 666) is probably not supposed to call the default method as 666 is > not an (eieio) object here; > (It should throw an error instead!!??) > > Considering we add this > (defclass any () > ()) > > Then this calls the default method as expected > (func (make-instance 'any)) Hi Frank, To make sure I didn't miss anything, does this mean your questions are all answered? Thanks Eric |
From: Frank <som...@gm...> - 2010-06-11 08:58:30
|
Eric M. Ludlam schrieb: >On 06/06/2010 04:05 PM, Frank wrote: > > >>Frank schrieb: >> >> >> >>>(func (make-instance 'foo)) >>> >>>;; Must be wrong as a methode which is bound for class foo is called! >>>;; I assume the default methode should be called. >>>(func 666) >>> >>> >>> >>I think I have to correct myself a bit; >>(func 666) is probably not supposed to call the default method as 666 is >>not an (eieio) object here; >>(It should throw an error instead!!??) >> >>Considering we add this >>(defclass any () >> ()) >> >>Then this calls the default method as expected >>(func (make-instance 'any)) >> >> > >Hi Frank, > >To make sure I didn't miss anything, does this mean your questions are >all answered? > >Thanks >Eric > > Nope not really. If I evaluate (func 666) then the result is "func foo :after 666". Obviously this call is dispatched to a method which is defined for objects of class foo but 666 is not such an object. This looks wrong to me. Please correct me if this is not the case (as I'm a beginner with LISP/CLOS). Thanks Frank |
From: Eric M. L. <er...@si...> - 2010-06-12 00:51:51
|
On 06/11/2010 04:58 AM, Frank wrote: > Eric M. Ludlam schrieb: >> Hi Frank, >> >> To make sure I didn't miss anything, does this mean your questions are >> all answered? >> >> Thanks >> Eric >> >> > Nope not really. > > If I evaluate (func 666) then the result is "func foo :after 666". > Obviously this call is dispatched to a method which is defined for > objects of class foo but 666 is not such an object. This looks wrong to > me. Please correct me if this is not the case (as I'm a beginner with > LISP/CLOS). Thanks for persisting. I was able to run your example today and see what you were talking about. I checked in a change for EIEIO to make it first robust to problems of calling (func 666) with a non-class, and then I also got it to find the right method implementation. This was always meant to work, but there was no test for that case, and EIEIO regressed at some point. Eric |