text: #### 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
  y < x # should be the same (warning msg not, however)
  x == y
  x <= y
  
  x > 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 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)
  e0 <- expression((x))
  e1 <- expression(sin(x))
  abc(e0)
  abc(e1)
  abc(e0[[1]])
  abc(e1[[1]])
  