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

\name{method.skeleton}
\alias{method.skeleton}
\title{Create a Skeleton File for a New Method}
\description{
  This function writes a source file containing a call to
  \code{\link{setMethod}} to define a method for the generic function
  and signature supplied.  By default the method definition is in line
  in the call, but can be made an external (previously assigned) function.
}
\usage{
method.skeleton(generic, signature, file, external = FALSE, where)
}
\arguments{
  \item{generic}{the character string name of the generic function, or
      the generic function itself.  In the first case, the function
      need not currently be a generic, as it would not for the
      resulting call to \code{\link{setMethod}}.}
  \item{signature}{the method signature, as it would be given to \code{\link{setMethod}}}
  \item{file}{a character string name for the output file, or a
      writable connection.  By default the generic function name and
      the classes in the signature are concatenated, with separating
      underscore characters.  The file name should normally end in \code{".R"}. }

    To write multiple method skeletons to one file, open the file
    connection first and then pass it to \code{method.skeleton()} in
    multiple calls.
  \item{external}{flag to control whether the function definition for
      the method should be a separate external object assigned in the
      source file, or included in line in the call to
      \code{\link{setMethod}}.
    If supplied as a character string, this will be used as the name
    for the external function; by default the name concatenates the
    generic and signature names, with separating underscores.}
  \item{where}{The environment in which to look for the function; by default,
    the top-level environment of the call to \code{method.skeleton}.}
}
\value{
  The \code{file} argument, invisibly, but the function is used for its side effect.
}
\seealso{\code{\link{setMethod}}, \code{\link{package.skeleton}}
}
\examples{
\dontshow{oWD <- setwd(tempdir())}
setClass("track", slots = c(x ="numeric", y="numeric"))
method.skeleton("show", "track")            ## writes show_track.R
method.skeleton("Ops", c("track", "track")) ## writes "Ops_track_track.R"

## write multiple method skeletons to one file
con <- file("./Math_track.R", "w")
method.skeleton("Math", "track", con)
method.skeleton("exp", "track", con)
method.skeleton("log", "track", con)
close(con)
\dontshow{setwd(oWD)}
}
\keyword{programming}
\keyword{methods}
