R's UseMethod() does not dispatch on changed class() (PR#167)

Peter Dalgaard BSA p.dalgaard@biostat.ku.dk
15 Apr 1999 19:00:14 +0200


Bill Venables <wvenable@arcola.stats.adelaide.edu.au> writes:

> Blundering late into this discussion I'm going to take a chance
> here and venture an opinion on what does happen in S3 UseMethod,
> regardless of what interpretations are made of A.6 in the white
> book.  This is by the "suck it and see" method, the only one I
> trust.  (The chance I take is in supposing this to be useful...)
> 
> 1. At the time of the UseMethod call the principal argument is
>    examined, and evaluated if necessary, and the class it has at
>    that stage is the one used for method dispatch.
> 
> 2. All non-missing arguments are passed on to the method with the
>    values they were supplied with at the time of the original
>    call, not the changed values they may have at the time of
>    dispatch, (including the principal argument).
> 
> 3. Missing arguments that have been given values at the time of
>    method dispatch, as well as local variables, retain their
>    current values when control passes to the method.
> 
> 4. Supplying a second argument to UseMethod() allows some other
>    argument than the first to act as the principal argument.
> 
> 5. Default values for arguments in the method supercede defaults
>    supplied in the generic.
> 
> The method directly occupies the frame of the generic, but
> arguments actually supplied to the generic re-assume their
> original supplied values (even though changes to the principal
> argument prior to method dispatch may determine mathod dispatch.)

Erm, does that cover this case?:

>  f<-function(x){x<-2;print(substitute(x));UseMethod("print")}  
> f(4)
[1] 2
[1] 4
> f((4))
(4)
[1] 2

(It may, I'm just too tired to see it...)

-- 
   O__  ---- Peter Dalgaard             Blegdamsvej 3  
  c/ /'_ --- Dept. of Biostatistics     2200 Cph. N   
 (*) \(*) -- University of Copenhagen   Denmark      Ph: (+45) 35327918
~~~~~~~~~~ - (p.dalgaard@biostat.ku.dk)             FAX: (+45) 35327907
-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-
r-devel mailing list -- Read http://www.ci.tuwien.ac.at/~hornik/R/R-FAQ.html
Send "info", "help", or "[un]subscribe"
(in the "body", not the subject !)  To: r-devel-request@stat.math.ethz.ch
_._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._._