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

\name{body}
\alias{body}
\alias{body<-}
\title{Access to and Manipulation of the Body of a Function}
\description{
  Get or set the body of a function.
}
\usage{
body(fun = sys.function(sys.parent()))
body(fun, envir = environment(fun)) <- value
}
\arguments{
  \item{fun}{a function object, or see \sQuote{Details}.}
  \item{envir}{environment in which the function should be defined.}
  \item{value}{an object, usually a \link{language object}: see section
    \sQuote{Value}.}
}
\details{
  For the first form, \code{fun} can be a character string
  naming the function to be manipulated, which is searched for from the
  parent frame.  If it is not specified, the function calling
  \code{body} is used.

  The bodies of all but the simplest are braced expressions, that is
  calls to \code{\{}: see the \sQuote{Examples} section for how to
  create such a call.
}
\value{
  \code{body} returns the body of the function specified.  This is
  normally a \link{language object}, most often a call to \code{\{}, but
  it can also be an object (e.g., \code{pi}) to be the return value of
  the function.

  The replacement form sets the body of a function to the
  object on the right hand side, and (potentially) resets the
  environment of the function.  If \code{value} is of class
  \code{"\link{expression}"} the first element is used as the body:  any
  additional elements are ignored, with a warning.
}
\seealso{
  \code{\link{alist}},
  \code{\link{args}},
  \code{\link{function}}.
}
\examples{
body(body)
f <- function(x) x^5
body(f) <- quote(5^x)
## or equivalently  body(f) <- expression(5^x)
f(3) # = 125
body(f)

## creating a multi-expression body
e <- expression(y <- x^2, return(y)) # or a list
body(f) <- as.call(c(as.name("{"), e))
f
f(8)
%% Rd parser bug? : need to backslash-escape the "{" below:
## Using substitute() may be simpler than 'as.call(c(as.name("\{",..)))':
stopifnot(identical(body(f), substitute({ y <- x^2; return(y) })))
}
\keyword{programming}
