
R version 3.6.2 Patched (2020-02-12 r77795) -- "Dark and Stormy Night"
Copyright (C) 2020 The R Foundation for Statistical Computing
Platform: 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  TRUE
Warning message:
Incompatible methods (">.foo", ">.bar") for ">" 
> y < x # should be the same (warning msg not, however)
[1] FALSE FALSE  TRUE
Warning message:
Incompatible methods ("Ops.bar", "Ops.foo") for "<" 
> x == y
[1] FALSE  TRUE FALSE
Warning message:
Incompatible methods ("Ops.foo", "Ops.bar") for "==" 
> x <= y
[1]  TRUE  TRUE FALSE
Warning 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.foo
using >.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 1
abc.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]])
> 
