Learn R Programming

aoos (version 0.5.0)

defineClass: Define a new class

Description

This is an experimental implementation of reference classes. Use defineRefClass or retList instead. defineClass has side effects. The constructor is the return value of defineClass.

Usage

defineClass(name, expr, contains = NULL)

private(x)

# S4 method for public private(x)

public(x = NULL, validity = function(x) TRUE)

# S4 method for `function` public(x = NULL, validity = function(x) TRUE)

# S4 method for private public(x = NULL, validity = function(x) TRUE)

# S4 method for public public(x = NULL, validity = function(x) TRUE)

Arguments

name
character name of the class
expr
expression
contains
character name of class from which to inherit
x
an object made public
validity
function to check the validity of an object

Details

defineClass creates a S4-Class which can be used for standard S4 method dispatch. It will also set the method 'initialize' which need not to be changed. If you want to have some operations carried out on initialization use a function definition named init as part of expr. The return value from defineClass is the constructor function. It has the argument ... which will be passed to init.

All classes defined with defineClass inherit from class "aoos" which is a S4-class containing an environment. In that environment expr is evaluated; for inheritance, all expr from all parents will be evaluated first.

Everything in expr will be part of the new class definition. A leading dot in a name will be interpreted as private. You can use public and private to declare private and public members explicitly. If x in a call to public is a function it will be a public member function (method). For any other class the return value of public is a get and set method. If called without argument it will get the value, if called with argument it will set the value. You can define a validity function which will be called whenever the set method is called. Objects which inherit from class environment can be accessed directly, i.e. not via get/set methods. If you want to access fields without get/set methods, you can use the class Accessor-class.

See Also

Accessor-class, Binary-class, Show-class

Examples

Run this code
test <- defineClass("test", {
  x <- "Working ..."
  .y <- 0
  doSomething <- public(function() {
    self$.y <- .y + 1
    cat(x(), "\n")
    invisible(self)
  })
})
instance <- test()
## Not run: ------------------------------------
# instance$.y # error
## ---------------------------------------------
instance$doSomething()$doSomething()
instance$x()
instance$x(2)
instance$x()

# Example for reference classes as field
MoreTesting <- defineClass("MoreTesting", {
  refObj <- test()
})
instance <- MoreTesting()
instance$refObj$x()

Run the code above in your browser using DataLab