Re: [CLOS] Ensuring a method exists



Wade Humeniuk wrote:
Didier Verna wrote:
Hi !

Suppose I have:

(defgeneric foo (a b) ...)

(defclass base () ...)
(defmethod foo ((a base) (b base)) ...)



I'd like to ensure that if somebody writes a derived class:

(defclass derived (base) ...)

she also provides a method for this class:

(defmethod foo ((a derived) (b derived)) ...)



If someone defines the DERIVED class, how long do you give them
to define the foo method? The first time foo is called with
and instance of derived?? Or can they use the inherited method
until they determine how they need to specialize on derived.
What you are asking flies in the face of interactive dynamic
development. You need the fluidity/imprecision during development.
Maybe when "everything is finished" then you can run a consistency
check to see that everything is "proper".

It seems to me that the latest possible stage to check this is when the applicable methods for some generic function call are determined. You can then just check whether the most specific primary method is specialized on exactly the classes of the arguments. This can be done in methods on compute-applicable-methods and compute-applicable-methods-using-classes.

It's also possible to do this in a user-defined method combination, but then you can only do the check as part of the execution of the effective method, whereas in c-a-m and c-a-m-u-c, once the check succeeds, it won't be checked again in subsequent calls of arguments of the same classes.


Pascal

--
My website: http://p-cos.net
Common Lisp Document Repository: http://cdr.eurolisp.org
Closer to MOP & ContextL: http://common-lisp.net/project/closer/
.



Relevant Pages

  • Re: [CLOS] Ensuring a method exists
    ... (defgeneric foo (a b) ... (defclass base () ... I'd like to ensure that if somebody writes a derived class: ... to define the foo method? ...
    (comp.lang.lisp)
  • Re: [CLOS] Ensuring a method exists
    ... (defgeneric foo (a b) ... (defclass base () ... I'd like to ensure that if somebody writes a derived class: ... to define the foo method? ...
    (comp.lang.lisp)
  • Re: Overriding newbie question.
    ... public virtual int MyMethod ... class Bar: Foo ... The other fundemental thing is this will only work if the method is being called on a derived class object. ...
    (microsoft.public.dotnet.languages.csharp)
  • Re: derived class can not access base class protected member?
    ... I am not invoking foo in derived class, the error occurs when I invoke ... void goo() ... Because foois defined as PRIVATE in the base class ...
    (microsoft.public.dotnet.languages.vc)
  • Re: Function Returning a local object???
    ... >>are themselves class objects or worse still objectsof a derived class, ... >>when foo returns such a class by value. ... the compiler will emit code similar to: ... >>(I've read enough to know that the copy constructor is only invloved ...
    (comp.lang.cpp)