Rev 76749 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% 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 genericfunction (as used for selection of methods) into a list, for study ordisplay. The list is actually from the class \code{listOfMethods}(see the section describing the class, below).The list will be limitedto the methods defined in environment \code{where} if that argument issupplied and limited to those including one or more of thespecified \code{classes} in the method signature if that argument issupplied.To see the actual table (an \code{\link{environment}}) usedfor methods dispatch, call \code{\link{getMethodsForDispatch}}.The names of the list returned by \code{findMethods} are the names ofthe objects in the table.The function \code{findMethodSignatures} returns a character matrixwhose rows are the class names from the signature of the correspondingmethods; it operates either from a list returned by\code{findMethods}, or by computing such a list itself, given the samearguments as \code{findMethods} .The function \code{hasMethods} returns \code{TRUE} or \code{FALSE}according to whether there is a non-empty table of methods forfunction \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 ofclass \code{MethodsList}, previously used for method dispatch. Thisclass of objects is deprecated generally and will disappear in afuture 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 listto look for methods metadata.If \code{where} is missing, \code{findMethods} uses the currenttable 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} thereturned value is the table used for dispatch, includinginherited methods discovered to date. Used internally, butsince 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 atleast one of the supplied classes will be included in the valuereturned.}\item{inherited}{Logical flag; if \code{TRUE}, the table of allmethods, inherited or defined directly, will be used; otherwise,only the methods explicitly defined. Option \code{TRUE} ismeaningful only if \code{where} is missing.}\item{...}{In the call to \code{findMethodSignatures}, any argumentsthat might be given to \code{findMethods}.}\item{target}{Optional flag to \code{findMethodSignatures}; if\code{TRUE}, the signatures used are the target signatures (theclasses for which the method will be selected); if \code{FALSE},they will be the signatures are defined. The difference is onlymeaningful if \code{inherited} is \code{TRUE}.}\item{methods}{In the call to \code{findMethodSignatures}, an optionallist 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 forthe generic function (e.g., \code{"base"} for primitives). Ifmissing this will be inferred either from the \code{"package"}attribute of the function name, if any, or from the package slot ofthe generic function. See \sQuote{Details}.}}\details{The functions obtain a table of the defined methods, either from thegeneric function or from the stored metadata object in the environmentspecified by \code{where}. In a call to \code{getMethods}, the information in the table is convertedas described above to produce the returned value, except with the\code{table} argument.Note that \code{hasMethods}, but not the other functions, can be usedeven if no generic function of this name is currently found. In thiscase \code{package} must either be supplied as an argument or includedas an attribute of \code{f}, since the package name is part of theidentification of the methods tables.}\section{The Class for lists of methods}{The class \code{"listOfMethods"} returns the methods as a named listof method definitions (or a primitive function, see the slotdocumentation below). The namesare the strings used to store the corresponding objects in theenvironment from which method dispatch is computed.The current implementation uses the names of the corresponding classesin the method signature, separated by \code{"#"} if more than oneargument is involved in the signature.}\section{Slots}{\describe{\item{\code{.Data}:}{Object of class \code{"list"} The methoddefinitions.Note that these may include the primitive functionitself as default method,when the generic corresponds to a primitive. (Basically, becauseprimitive functions are abnormal R objects, which cannot currently beextended as method definitions.) Computations that use the returnedlist to derive other information need to take account of thispossibility. See the implementation of \code{findMethodSignatures}for an example.}\item{\code{arguments}:}{Object of class \code{"character"}. Thenames of the formal arguments in the signature of the generic function. }\item{\code{signatures}:}{Object of class \code{"list"}. A list ofthe signatures of the individual methods. This is currently theresult 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 forgenerality. Calling \code{findMethodSignatures} as in the examplebelow will always convert to the matrix form.}\item{\code{generic}:}{Object of class \code{"genericFunction"}.The generic function corresponding to these methods. Thereare plans to generalize this slot to allow reference to the function.}\item{\code{names}:}{Object of class \code{"character"}. Thenames 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}