Rev 40086 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
#### Testing UseMethod() and even more NextMethod()#### --------------------#### i.e., S3 methods *only*. For S4, see reg-S4.R## ~~~~~~~~###-- Group methods## previous versions used print() and hit an auto-printing bug.### Arithmetic "Ops" :">.bar" <- function(...) {cat("using >.bar\n"); FALSE}">.foo" <- function(...) {cat("using >.foo\n"); TRUE}Ops.foo <- function(...) {cat("using Ops.foo\n")NextMethod()}Ops.bar <- function(...) {cat("using Ops.bar\n")TRUE}x <- 2:4 ; class(x) <- c("foo", "bar")y <- 4:2 ; class(y) <- c("bar", "foo")## The next 4 give a warning each about incompatible methods:x > yy < x # should be the same (warning msg not, however)x == yx <= yx > 3 ##[1] ">.foo"rm(list=">.foo")x > 3 #-> "Ops.foo" and ">.bar"### ------------ was ./mode-methods.R till R ver. 1.0.x ----------------###-- Using Method Dispatch on "mode" etc :## Tests S3 dispatch with the class attr forced to be data.class## Not very relevant when S4 methods are around, but kept for historical interestabc <- function(x, ...) {cat("abc: Before dispatching; x has class `", class(x), "':", sep="")str(x)UseMethod("abc", x) ## UseMethod("abc") (as in S) fails}abc.default <- function(x, ...) sys.call()"abc.(" <- function(x)cat("'(' method of abc:", deparse(sys.call(sys.parent())),"\n")abc.expression <- function(x)cat("'expression' method of abc:", deparse(sys.call(sys.parent())),"\n")abc(1)e0 <- expression((x))e1 <- expression(sin(x))abc(e0)abc(e1)abc(e0[[1]])abc(e1[[1]])