[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: Finding "Non-applicable" Methods
- To: David E. Wallace <email@example.com>
- Subject: Re: Finding "Non-applicable" Methods
- From: Gregor.pa@Xerox.COM
- Date: Wed, 28 Dec 88 13:35 PST
- Cc: commonloops.pa@Xerox.COM
- Fcc: BD:>Gregor>mail>outgoing-mail-5.text.newest
- In-reply-to: <8812231957.AA13792@hpldew.HP.COM>
- Line-fold: no
Date: Fri, 23 Dec 88 11:57:20 PST
From: David E. Wallace <wallace%hpldew@hplabs.HP.COM>
The CLOS Spec in Chapters 1 & 2 offers a way to find all applicable
methods for a given set of arguments, but it doesn't seem to provide
any way to determine what methods might be applicable to a different
set of arguments. What I would like to see is (1): a way to get all
currently defined methods on a particular generic function, and (2):
a way to determine, given a method object, what set of arguments
would select it. Is there a portable way to do this with the spec
as it now stands? If not, is it still possible to submit something
like this as a cleanup proposal?
The functionality you are asking for is available with simple metaobject
accessors defined in the metaobject protocol. Using these accessors, it
is possible to find out about the methods of a generic function, and the
class precedence list of classes. Given that information, you can write
the particular functionality you are asking for.
The accessors in question are:
GENERIC-FUNCTION-METHODS (generic-function) [Generic Function]
Given a generic function object, this returns a list of the methods on
that generic function. The elements of this list are method objects.
METHOD-SPECIALIZERS (method) [Generic Function]
Given a method object, this returns a list of the method's specializers.
The elements of this list are class objects, or lists of the form (EQL
CLASS-PRECEDENCE-LIST (class) [Generic Function]
Given a class, this returns the class precedence list of the class. The
elements of this list are class objects.
Each of these exist in the current PCL with the exception that
method-specializers is currently called method-type-specifiers.