Rev 81507 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
R Under development (unstable) (2022-03-19 r81942) -- "Unsuffered Consequences"Copyright (C) 2022 The R Foundation for Statistical ComputingPlatform: x86_64-pc-linux-gnu (64-bit)R is free software and comes with ABSOLUTELY NO WARRANTY.You are welcome to redistribute it under certain conditions.Type 'license()' or 'licence()' for distribution details.R is a collaborative project with many contributors.Type 'contributors()' for more information and'citation()' on how to cite R or R packages in publications.Type 'demo()' for some demos, 'help()' for on-line help, or'help.start()' for an HTML browser interface to help.Type 'q()' to quit R.> #### 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 > y[1] FALSE FALSE TRUEWarning message:Incompatible methods (">.foo", ">.bar") for ">"> y < x # should be the same (warning msg not, however)[1] FALSE FALSE TRUEWarning message:Incompatible methods ("Ops.bar", "Ops.foo") for "<"> x == y[1] FALSE TRUE FALSEWarning message:Incompatible methods ("Ops.foo", "Ops.bar") for "=="> x <= y[1] TRUE TRUE FALSEWarning message:Incompatible methods ("Ops.foo", "Ops.bar") for "<=">> x > 3 ##[1] ">.foo"using >.foo[1] TRUE>> rm(list=">.foo")> x > 3 #-> "Ops.foo" and ">.bar"using Ops.foousing >.bar[1] FALSE>>>> ### ------------ 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 interest> abc <- 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)abc: Before dispatching; x has class `numeric': num 1abc.default(1)> e0 <- expression((x))> e1 <- expression(sin(x))> abc(e0)abc: Before dispatching; x has class `expression': expression((x))'expression' method of abc: abc.expression(e0)> abc(e1)abc: Before dispatching; x has class `expression': expression(sin(x))'expression' method of abc: abc.expression(e1)> abc(e0[[1]])abc: Before dispatching; x has class `(': language, mode "(": (x)'(' method of abc: `abc.(`(e0[[1]])> abc(e1[[1]])abc: Before dispatching; x has class `call': language sin(x)abc.default(e1[[1]])>