...className
,
by taking another object and add ...className
to the class
list and also add all the named values in ...
as attributes.
The method should be used by the constructor of a class and nowhere else.## S3 method for class 'default':
extend(this, ...className, ...)
...className
.setConstructorS3("MyDouble", function(value=0, ...) {
extend(as.double(value), "MyDouble", ...)
})
setMethodS3("as.character", "MyDouble", function(object, ...) {
fmtstr <- attr(object, "fmtstr")
if (is.null(fmtstr))
fmtstr <- "%.6f"
sprintf(fmtstr, object)
})
setMethodS3("print", "MyDouble", function(object, ...) {
print(as.character(object), ...)
})
x <- MyDouble(3.1415926)
print(x)
x <- MyDouble(3.1415926, fmtstr="%3.2f")
print(x)
attr(x, "fmtstr") <- "%e"
print(x)
setConstructorS3("MyList", function(value=0, ...) {
extend(list(value=value, ...), "MyList")
})
setMethodS3("as.character", "MyList", function(object, ...) {
fmtstr <- object$fmtstr
if (is.null(fmtstr))
fmtstr <- "%.6f"
sprintf(fmtstr, object$value)
})
setMethodS3("print", "MyList", function(object, ...) {
print(as.character(object), ...)
})
x <- MyList(3.1415926)
print(x)
x <- MyList(3.1415926, fmtstr="%3.2f")
print(x)
x$fmtstr <- "%e"
print(x)
Run the code above in your browser using DataLab