| % File src/library/methods/man/callGeneric.Rd |
| % Part of the R package, https://www.R-project.org |
| % Copyright 1995-2007 R Core Team |
| % Distributed under GPL 2 or later |
| |
| \name{callGeneric} |
| \alias{callGeneric} |
| \title{Call the Current Generic Function from a Method} |
| \description{ |
| A call to \code{callGeneric} can only appear inside a method |
| definition. It then results in a call to the current generic |
| function. The value of that call is the value of \code{callGeneric}. |
| While it can be called from any method, it is useful and typically |
| used in methods for group generic functions. |
| } |
| \usage{ |
| callGeneric(...) |
| } |
| \arguments{ |
| \item{\dots}{ |
| Optionally, the arguments to the function in its next call. |
| |
| If no arguments are included in the call to \code{callGeneric}, the |
| effect is to call the function with the current arguments. |
| See the detailed description for what this really means. |
| } |
| } |
| \details{ |
| The name and package of the current generic function is stored in the |
| environment of the method definition object. This name is looked up |
| and the corresponding function called. |
| |
| The statement that passing no arguments to \code{callGeneric} causes |
| the generic function to be called with the current arguments is |
| more precisely as follows. Arguments that were missing in the current |
| call are still missing (remember that \code{"missing"} is a valid |
| class in a method signature). For a formal argument, say \code{x}, that |
| appears in the original call, there is a corresponding argument in the |
| generated call equivalent to \code{x = x}. In effect, this |
| means that the generic function sees the same actual arguments, but |
| arguments are evaluated only once. |
| |
| Using \code{callGeneric} with no arguments is prone to creating |
| infinite recursion, unless one of the arguments in the signature has |
| been modified in the current method so that a different method is selected. |
| } |
| \value{ |
| The value returned by the new call. |
| } |
| \references{ |
| Chambers, John M. (2016) |
| \emph{Extending R}, |
| Chapman & Hall. |
| (Chapters 9 and 10.) |
| |
| Chambers, John M. (2008) |
| \emph{Software for Data Analysis: Programming with R} |
| Springer. (Section 10.4 for some details.) |
| |
| } |
| \seealso{\code{\link{GroupGenericFunctions}} for other information |
| about group generic functions; \link{Methods_Details} for the general behavior |
| of method dispatch |
| } |
| \examples{ |
| ## the method for group generic function Ops |
| ## for signature( e1="structure", e2="vector") |
| function (e1, e2) |
| { |
| value <- callGeneric(e1@.Data, e2) |
| if (length(value) == length(e1)) { |
| e1@.Data <- value |
| e1 |
| } |
| else value |
| } |
| |
| ## For more examples |
| \dontrun{ |
| showMethods("Ops", includeDefs = TRUE) |
| } |
| |
| } |
| |
| \keyword{programming} |
| \keyword{classes} |
| \keyword{methods} |