UseMethod                package:base                R Documentation

_C_l_a_s_s _M_e_t_h_o_d_s

_D_e_s_c_r_i_p_t_i_o_n:

     R possesses a simple generic function mechanism which can be used
     for an object-oriented style of programming.  Method despatch
     takes place based on the class of the first argument to the
     generic function or on the object supplied as an argument to
     'UseMethod' or 'NextMethod'.

_U_s_a_g_e:

     UseMethod(generic, object)
     NextMethod(generic = NULL, object = NULL, ...)

_A_r_g_u_m_e_n_t_s:

 generic: a character string naming a function.

  object: an object whose class will determine the method to be
          dispatched.  Defaults to the first argument of the enclosing
          function.

     ...: further arguments to be passed to the method.

_D_e_t_a_i_l_s:

     An R "object" is a data object which has a 'class' attribute. A
     class attribute is a character vector giving the names of the
     classes which the object "inherits" from. If the object does not
     have a class attribute, it has an implicit class, '"matrix"',
     '"array"' or the result of 'mode(x)'.

     When a generic function 'fun' is applied to an object with class
     attribute 'c("first", "second")', the system searches for a
     function called 'fun.first' and, if it finds it, applied it to the
     object.  If no such function is found a function called
     'fun.second' is tried. If no class name produces a suitable
     function, the function 'fun.default' is used.

     Function 'methods' can be used to find out about the methods for a
     particular generic function or class.

     Now for some obscure details that need to appear somewhere.  These
     comments will be slightly different than those in Appendix A of
     the White S Book. 'UseMethod' creates a "new" function call with
     arguments matched as they came in to the generic.  Any local
     variables defined before the call to 'UseMethod' are retained
     (unlike S).  Any statements after the call to 'UseMethod' will not
     be evaluated as 'UseMethod' does not return.  'UseMethod' can be
     called with more than two arguments: a warning will be given and
     additional arguments ignored. (They are not completely ignored in
     S.)  If it is called with just one argument, the class of the
     first argument of the enclosing function is used as 'object':
     unlike S this is the actual argument passed and not the current
     value of the object of that name.

     'NextMethod' invokes the next method (determined by the class). 
     It does this by creating a special call frame for that method. 
     The arguments will be the same in number, order and name as those
     to the current method but their values will be promises to
     evaluate their name in the current method and environment.  Any
     arguments matched to '...' are handled specially.  They are passed
     on as the promise that was supplied as an argument to the current
     environment. (S does this differently!)  If they have been
     evaluated in the current (or a previous environment) they remain
     evaluated.

     'NextMethod' should not be called except in methods called by
     'UseMethod'. In particular it will not work inside anonymous
     calling functions (eg 'get("print.ts")(AirPassengers)').

     Name spaces can register methods for generic functions.  To
     support this, 'UseMethod' and 'NextMethod' search for methods in
     two places: first in the environment in which the generic function
     is called, and then in the registration data base for the
     environment in which the generic is defined (typically a name
     space). So methods for a generic function need to either be
     available in the environment of the call to the generic, or they
     must be registered. It does not matter whether they are visible in
     the environment in which the generic is defined.

_W_a_r_n_i_n_g:

     'UseMethod' accepts a call with no arguments and tries to deduce
     the generic from the context.  This was undocumented on the help
     page and is now deprecated.  It is allowed but 'strongly
     discouraged' in S-PLUS.

_N_o_t_e:

     This scheme is called _S3_ (S version 3).  For new projects, it is
     recommended to use the more flexible and robust _S4_ scheme
     provided in the 'methods' package. 

     The function '.isMethodsDispatchOn()' returns 'TRUE' if the S4
     method dispatch has been turned on in the evaluator. It is meant
     for R internal use only.

_R_e_f_e_r_e_n_c_e_s:

     Chambers, J. M. (1992) _Classes and methods: object-oriented
     programming in S._ Appendix A of _Statistical Models in S_ eds J.
     M. Chambers and T. J. Hastie, Wadsworth & Brooks/Cole.

_S_e_e _A_l_s_o:

     'methods', 'class', 'getS3method'

