Prof Brian D Ripley wrote: > > On Fri, 17 Jan 2003, John Chambers wrote: > > > There are two main known differences from having methods attached: > > > > - the definition of class() changes, in particular no object ever has a > > NULL class. If you have code that depends on test such as > > `if(is.null(class(x)))...', there may be problems. > > > > Usually code with those sort of tests is doing a workaround of the fact > > that not all objects had a class before. The best solution is usually > > to ask what the code really wants to do. If you do have to retain > > exactly the old behavior, one solution is to copy the version of class > > and class<- from the base package and use those (as baseClass and > > baseClass<-, e.g.) instead of class and class<-). > > Here is one example, which makes the MASS scripts fail. > > > library(MASS) > > corresp > function (x, ...) > { > if (is.null(class(x))) > class(x) <- data.class(x) > UseMethod("corresp", x, ...) > } > > That used to work with matrices, and dispatch to corresp.matrix. > Now a matrix has reported class "matrix" but dispatch occurs to > corresp.default. The temporary fix is to remove the is.null condition. > > That's quite a common construction, and I think I should expect UseMethod > to dispatch on the class class() reports. So it looks to me as if > UseMethod needs to be altered to do so.
I agree. This seems an example of the workaround to dispatch on "classes" that didn't have a class attribute in the old style. The only situation I can see immediately that would be broken by a change to UseMethod on these lines would be a case that, e.g., a foo.matrix existed but the programmer wanted to dispatch foo.default on matrix objects without an explicit class attribute. Seems rather bizarre. Can anyone think of other situations that would break? John > > Brian > > -- > Brian D. Ripley, [EMAIL PROTECTED] > Professor of Applied Statistics, http://www.stats.ox.ac.uk/~ripley/ > University of Oxford, Tel: +44 1865 272861 (self) > 1 South Parks Road, +44 1865 272866 (PA) > Oxford OX1 3TG, UK Fax: +44 1865 272595 > > ______________________________________________ > [EMAIL PROTECTED] mailing list > http://www.stat.math.ethz.ch/mailman/listinfo/r-devel -- John M. Chambers [EMAIL PROTECTED] Bell Labs, Lucent Technologies office: (908)582-2681 700 Mountain Avenue, Room 2C-282 fax: (908)582-3340 Murray Hill, NJ 07974 web: http://www.cs.bell-labs.com/~jmc ______________________________________________ [EMAIL PROTECTED] mailing list http://www.stat.math.ethz.ch/mailman/listinfo/r-devel