Rev 20092 | Rev 24661 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
\name{getMethod}\alias{getMethod}\alias{findMethod}\alias{existsMethod}\alias{getMethods}\alias{selectMethod}\alias{hasMethod}\alias{MethodsListSelect}\title{ Get or Test for the Definition of a Method }\description{The functions \code{getMethod} and \code{selectMethod} get thedefinition of a particular method; the functions \code{existsMethod}and \code{hasMethod} test for the existence of a method. In bothcases the first function only gets direct definitions and the seconduses inheritance.The function \code{findMethod} returns the package(s) in the searchlist (or in the packages specified by the \code{where} argument) thatcontain a method for this function and signature.The other functions are support functions: see the details below.}\usage{getMethod(f, signature=character(), where, optional=FALSE)findMethod(f, signature, where)getMethods(f, where=-1)existsMethod(f, signature = character(), where)hasMethod(f, signature=character())selectMethod(f, signature, optional=FALSE, useInherited,mlist=getMethods(f), fdef = getGeneric(f))MethodsListSelect(f, env, mlist, fEnv, finalDefault, evalArgs,useInherited, fdef)}\arguments{\item{f}{ The character-string name of the generic function.In \code{getMethods} only, this argument may be a functiondefinition, in which case the special methods list object, if any,stored in the environment of the function is returned. (This usageis largely for internal purposes; you aren't likely to have such afunction definition for direct use.)}\item{signature}{ The signature of classes to match to the argumentsof \code{f}. The vector of strings for the classes should be named,and the names must match formal argument names of \code{f}. If notnamed, the signature is assumed to apply to the arguments of\code{f} in order, but note below for \code{selectMethod}.For \code{selectMethod}, the signature can optionally be anenvironment with classes assigned to the names of the correspondingarguments. Note: the names correspond to the names of the classes, \emph{not}to the objects supplied in a call to the generic function.}\item{where}{ The position or environment in which to look for the method: by default,anywhere inthe current search list.}\item{optional}{ If the selection does not produce a unique result,an error is generated, unless this argument is \code{TRUE}. In thatcase, the value returned is either a \code{MethodsList} object, ifmore than one method matches this signature, or \code{NULL} if nomethod matches.}\item{mlist, fdef}{In \code{selectMethod}, the \code{MethodsList} objectand/or the generic function object can be explicitly supplied. (Unlikely to be used, except in therecursive call that finds matches to more than one argument.)}\item{env}{The environment in which argument evaluations are done in\code{MethodsListSelect}. Currently must be supplied, but shouldusually be \code{sys.frame(sys.parent())} when calling the functionexplicitly for debugging purposes.}\item{fEnv, finalDefault, evalArgs, useInherited}{ Internal-usearguments for the function's environment, the method to use asthe overall default, whether to evaluate arguments, and whicharguments should use inheritance.}}\details{A call to \code{getMethod} returns the method for a particularfunction and signature. As with other \code{get} functions,argument \code{where} controls where the function looks (by defaultanywhere in the search list) and argument \code{optional} controlswhether the function returns \code{NULL} or generates an error ifthe method is not found. The search for the method makes no use ofinheritance.The function \code{selectMethod} also looks for a method given thefunction and signature, but makes full use of the method dispatchmechanism; i.e., inherited methods and group generics are taken intoaccount just as they would be in dispatching a method for thecorresponding signature, with the one exception that conditionalinheritance is not used. Like \code{getMethod}, \code{selectMethod}returns \code{NULL} or generates an error ifthe method is not found, depending on the argument \code{optional}.The functions \code{existsMethod} and \code{hasMethod} return\code{TRUE} or \code{FALSE} according to whether a method is found,the first corresponding to \code{getMethod} (no inheritance) and thesecond to \code{selectMethod}.The function \code{getMethods} returns all the methods for aparticular generic (in the form of a generic function with themethods information in its environment). The function is calledfrom the evaluator to merge method information, and is not intendedto be called directly.The function \code{MethodsListSelect} performs a full search(including all inheritance and group generic information: see the\link{Methods} documentation page for details on how this works).The call returns a possibly revised methods list object,incorporating any method found as part of the \code{allMethods}slot.Normally you won't call \code{MethodsListSelect} directly, but it ispossible to use it for debugging purposes (only for distinctlyadvanced users!).Note that the statement that \code{MethodsListSelect} corresponds to theselection done by the evaluator is a fact, not an assertion, in thesense that the evaluator code constructs and executes a call to\code{MethodsListSelect} when it does not already have a cached methodfor this generic function and signature. (The value returned isstored by the evaluator so that the search is not required nexttime.)}\value{The call to \code{selectMethod} or \code{getMethod} returns a\code{\link{MethodDefinition-class}} object, the selected method, ifa unique selection exists.(This class extends \code{function}, so you can use the resultdirectly as a function if that is what you want.)Otherwise an error is thrown if \code{optional} is \code{FALSE}. If\code{optional} is \code{TRUE}, the value returned is \code{NULL} ifno method matched, or a \code{MethodsList} object if multiplemethods matched.The call to \code{getMethods} returns the \code{MethodsList} objectcontaining all the methods requested. If there are none,\code{NULL} is returned: \code{getMethods} does not generate anerror in this case.}\references{The R package \code{methods} implements, with a few exceptions, theprogramming interface for classesand methods in the book \emph{Programming with Data} (JohnM. Chambers, Springer, 1998), in particular sections 1.6, 2.7, 2.8,and chapters 7 and 8.While the programming interface for the methods package follows the reference,the R software is an original implementation, so details inthe reference that reflect the S4 implementation may appeardifferently in R. Also, there are extensions to the programminginterface developed more recently than the reference. For adiscussion of details and ongoing development, see the web page\url{http://developer.r-project.org/methodsPackage.html} and thepointers from that page.}\keyword{programming}\keyword{classes}\keyword{methods}