% File src/library/methods/man/MethodsList-class.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2015 R Core Team
% Distributed under GPL 2 or later

\name{MethodsList-class}
\alias{MethodsList-class}
\alias{body<-,MethodDefinition-method}
\docType{class}
\title{Class \code{"MethodsList"}, Defunct Representation of Methods }
\description{ This class of objects was used in the original
  implementation of the package to control method dispatch.  Its use
  is now defunct, but object appear as the default method slot in
  generic functions.  This and any other remaining uses will be
  removed in the future.

 For the modern alternative, see \linkS4class{listOfMethods}.

The details in this documentation are retained to allow analysis of
old-style objects. }
\section{Slots}{\describe{

  \item{\code{argument}:}{Object of class \code{"name"}.  The name of the
    argument being used for dispatch at this level. }
  \item{\code{methods}:}{A named list of the methods (and method lists)
    defined \emph{explicitly} for this argument.
 The names are the names of classes, and the corresponding
  element defines the method or methods to be used if the corresponding
  argument has that class.  See the details below.}
  \item{\code{allMethods}:}{A named list,  contains
    all the directly defined methods from the \code{methods} slot, plus
    any inherited methods.  Ignored when methods tables are used for dispatch (see \link{Methods_Details}). }
}}

\details{
  Suppose a function \code{f} has
  formal arguments \code{x} and \code{y}.  The methods list object for
  that function has the object \code{as.name("x")} as its
  \code{argument} slot.  An element of the methods named \code{"track"}
  is selected if the actual argument corresponding to \code{x} is an
  object of class \code{"track"}.  If there is such an element, it can
  generally be either a function or another methods list object.

  In the first case, the function defines the method to use for any call
  in which \code{x} is of class \code{"track"}.  In the second case, the
  new methods list object defines the available methods depending on
  the remaining formal arguments, in this example, \code{y}.

  Each method  corresponds conceptually to a \emph{signature};
  that is a named list of classes, with names corresponding to some or
  all of the formal arguments.  In the previous example, if selecting
  class \code{"track"} for \code{x}, finding that the selection was
  another methods list and then selecting class \code{"numeric"} for
  \code{y} would produce a method associated with the signature
  \code{x = "track", y = "numeric"}.

}

\section{Extends}{
Class \code{"OptionalMethods"}, directly.
}
\keyword{classes}
\keyword{methods}
