blob: 5d1d7a9693939634e25782361a3295da39b58081 [file] [log] [blame]
% File src/library/methods/man/findMethods.Rd
% Part of the R package, https://www.R-project.org
% Copyright 2008-2019 R Core Team
% Distributed under GPL 2 or later
\name{findMethods}
\title{Description of the Methods Defined for a Generic Function}
\alias{findMethods}
\alias{findMethodSignatures}
\alias{hasMethods}
\alias{getMethods}
\alias{listOfMethods-class}
\description{
The function \code{findMethods} converts the methods defined in a table for a generic
function (as used for selection of methods) into a list, for study or
display. The list is actually from the class \code{listOfMethods}
(see the section describing the class, below).
The list will be limited
to the methods defined in environment \code{where} if that argument is
supplied and limited to those including one or more of the
specified \code{classes} in the method signature if that argument is
supplied.
To see the actual table (an \code{\link{environment}}) used
for methods dispatch, call \code{\link{getMethodsForDispatch}}.
The names of the list returned by \code{findMethods} are the names of
the objects in the table.
The function \code{findMethodSignatures} returns a character matrix
whose rows are the class names from the signature of the corresponding
methods; it operates either from a list returned by
\code{findMethods}, or by computing such a list itself, given the same
arguments as \code{findMethods} .
The function \code{hasMethods} returns \code{TRUE} or \code{FALSE}
according to whether there is a non-empty table of methods for
function \code{f} in the environment or search position \code{where}
(or for the generic function generally if \code{where} is missing).
The defunct function \code{getMethods} is an older alternative to
\code{findMethods} , returning information in the form of an object of
class \code{MethodsList}, previously used for method dispatch. This
class of objects is deprecated generally and will disappear in a
future version of R.
}
\usage{
findMethods(f, where, classes = character(), inherited = FALSE,
package = "")
findMethodSignatures(..., target = TRUE, methods = )
hasMethods(f, where, package)
## Deprecated in 2010 and defunct in 2015 for 'table = FALSE':
getMethods(f, where, table = FALSE)
}
\arguments{
\item{f}{A generic function or the character-string name of one.}
\item{where}{Optionally, an environment or position on the search list
to look for methods metadata.
If \code{where} is missing, \code{findMethods} uses the current
table of methods in the generic function itself, and
\code{hasMethods} looks for metadata anywhere in the search list.
}
\item{table}{ If \code{TRUE} in a call to \code{getMethods} the
returned value is the table used for dispatch, including
inherited methods discovered to date. Used internally, but
since the default result is the now unused \code{mlist} object,
the default will likely be changed at some point.
}
\item{classes}{If supplied, only methods whose signatures contain at
least one of the supplied classes will be included in the value
returned.}
\item{inherited}{Logical flag; if \code{TRUE}, the table of all
methods, inherited or defined directly, will be used; otherwise,
only the methods explicitly defined. Option \code{TRUE} is
meaningful only if \code{where} is missing.}
\item{...}{In the call to \code{findMethodSignatures}, any arguments
that might be given to \code{findMethods}.}
\item{target}{Optional flag to \code{findMethodSignatures}; if
\code{TRUE}, the signatures used are the target signatures (the
classes for which the method will be selected); if \code{FALSE},
they will be the signatures are defined. The difference is only
meaningful if \code{inherited} is \code{TRUE}.}
\item{methods}{In the call to \code{findMethodSignatures}, an optional
list of methods, presumably returned by a previous call to
\code{findMethods}. If missing, that function will be call with the
\dots arguments.}
\item{package}{In a call to \code{hasMethods}, the package name for
the generic function (e.g., \code{"base"} for primitives). If
missing this will be inferred either from the \code{"package"}
attribute of the function name, if any, or from the package slot of
the generic function. See \sQuote{Details}.}
}
\details{
The functions obtain a table of the defined methods, either from the
generic function or from the stored metadata object in the environment
specified by \code{where}. In a call to \code{getMethods}, the information in the table is converted
as described above to produce the returned value, except with the
\code{table} argument.
Note that \code{hasMethods}, but not the other functions, can be used
even if no generic function of this name is currently found. In this
case \code{package} must either be supplied as an argument or included
as an attribute of \code{f}, since the package name is part of the
identification of the methods tables.
}
\section{The Class for lists of methods}{
The class \code{"listOfMethods"} returns the methods as a named list
of method definitions (or a primitive function, see the slot
documentation below). The names
are the strings used to store the corresponding objects in the
environment from which method dispatch is computed.
The current implementation uses the names of the corresponding classes
in the method signature, separated by \code{"#"} if more than one
argument is involved in the signature.
}
\section{Slots}{
\describe{
\item{\code{.Data}:}{Object of class \code{"list"} The method
definitions.
Note that these may include the primitive function
itself as default method,
when the generic corresponds to a primitive. (Basically, because
primitive functions are abnormal R objects, which cannot currently be
extended as method definitions.) Computations that use the returned
list to derive other information need to take account of this
possibility. See the implementation of \code{findMethodSignatures}
for an example.
}
\item{\code{arguments}:}{Object of class \code{"character"}. The
names of the formal arguments in the signature of the generic function. }
\item{\code{signatures}:}{Object of class \code{"list"}. A list of
the signatures of the individual methods. This is currently the
result of splitting the \code{names} according to the \code{"#"}
separator.
If the object has been constructed from a table, as when returned by
\code{findMethods}, the signatures will all have the same length.
However, a list rather than a character matrix is used for
generality. Calling \code{findMethodSignatures} as in the example
below will always convert to the matrix form.}
\item{\code{generic}:}{Object of class \code{"genericFunction"}.
The generic function corresponding to these methods. There
are plans to generalize this slot to allow reference to the function.}
\item{\code{names}:}{Object of class \code{"character"}. The
names as noted are the class names separated by \code{"#"} .}
}
}
\section{Extends}{
Class \code{"\linkS4class{namedList}"}, directly.
Class \code{"\linkS4class{list}"}, by class \code{"namedList"}, distance 2.
Class \code{"\linkS4class{vector}"}, by class \code{"namedList"}, distance 3.
}
\seealso{ \code{\link{showMethods}}, \code{\link{selectMethod}}, \link{Methods_Details} }
\examples{
mm <- findMethods("Ops")
findMethodSignatures(methods = mm)
}
\keyword{programming}
\keyword{classes}
\keyword{methods}