mirror of
https://git.savannah.gnu.org/git/emacs.git
synced 2024-11-24 07:20:37 +00:00
Clarify manual section on &context specializer for methods
* doc/lispref/functions.texi (Generic Functions): Provide a little more information on how they work.
This commit is contained in:
parent
8e13d3ab1a
commit
94b52207cf
@ -1225,7 +1225,7 @@ This form defines a method like @code{cl-defmethod} does.
|
||||
@end table
|
||||
@end defmac
|
||||
|
||||
@defmac cl-defmethod name [qualifier] arguments &rest [docstring] body
|
||||
@defmac cl-defmethod name [qualifier] arguments [&context (expr spec)@dots{}] &rest [docstring] body
|
||||
This macro defines a particular implementation for the generic
|
||||
function called @var{name}. The implementation code is given by
|
||||
@var{body}. If present, @var{docstring} is the documentation string
|
||||
@ -1252,15 +1252,20 @@ defined with @code{cl-defstruct} (@pxref{Structures,,, cl, Common Lisp
|
||||
Extensions for GNU Emacs Lisp}), or of one of its parent classes.
|
||||
@end table
|
||||
|
||||
Alternatively, the argument specializer can be of the form
|
||||
@code{&context (@var{expr} @var{spec})}, in which case the value of
|
||||
@var{expr} must be compatible with the specializer provided by
|
||||
@var{spec}; @var{spec} can be any of the forms described above. In
|
||||
other words, this form of specializer uses the value of @var{expr}
|
||||
instead of arguments for the decision whether the method is
|
||||
applicable. For example, @code{&context (overwrite-mode (eql t))}
|
||||
will make the method compatible only when @code{overwrite-mode} is
|
||||
turned on.
|
||||
Method definitions can make use of a new argument-list keyword,
|
||||
@code{&context}, which introduces extra specializers that test the
|
||||
environment at the time the method is run. This keyword should appear
|
||||
after the list of required arguments, but before any @code{&rest} or
|
||||
@code{&optional} keywords. The @code{&context} specializers look much
|
||||
like regular argument specializers---(@var{expr} @var{spec})---except
|
||||
that @var{expr} is an expression to be evaluated in the current
|
||||
context, and the @var{spec} is a value to compare against. For
|
||||
example, @code{&context (overwrite-mode (eql t))} will make the method
|
||||
applicable only when @code{overwrite-mode} is turned on. The
|
||||
@code{&context} keyword can be followed by any number of context
|
||||
specializers. Because the context specializers are not part of the
|
||||
generic function's argument signature, they may be omitted in methods
|
||||
that don't require them.
|
||||
|
||||
The type specializer, @code{(@var{arg} @var{type})}, can specify one
|
||||
of the @dfn{system types} in the following list. When a parent type
|
||||
|
Loading…
Reference in New Issue
Block a user