setConstructorS3: Defines a class in S3/UseMethod style
Description
Defines a class in R.oo/S3 style.
What this function currently does is simply creating a constructor
function for the class.
Usage
"setConstructorS3"(name, definition, private=FALSE, protected=FALSE, export=TRUE, static=FALSE, abstract=FALSE, trial=FALSE, deprecated=FALSE, envir=parent.frame(), enforceRCC=TRUE, ...)
A constructor must be callable without arguments
The requirement that a constructor function should be callable without
arguments (e.g. MyConstructor()
) is because that call is used
to create the static instance of a class. The reason for this is that
a static instance of the class is created automatically when the
constructor is called the first time (only), that is,
when the first of object of that class is created.
All classes have to have a static instance. To make a constructor callable without arguments, one can either make
sure all arguments have default values or one can test for missing
arguments using missing()
.
For instance the following defintion is not correct:
setConstructorS3("Foo", function(x) extend(Object(), "Foo", x=x))
whereas this one is
setConstructorS3("Foo", function(x=NA) extend(Object(), "Foo", x=x))
Code validation
If argument enforceRCC
is TRUE
,
the class name is validated so it starts with a letter and it
also gives a warning
if its first letter is not captial. The
reason for this is to enforce a naming convention that names classes
with upper-case initial letters and methods with lower-case initial
letters (this is also the case in for instance Java).