Rev 71228 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed
% File src/library/methods/man/representation.Rd% Part of the R package, https://www.R-project.org% Copyright 1995-2016 R Core Team% Distributed under GPL 2 or later\name{representation}\alias{representation}\alias{prototype}\title{ Construct a Representation or a Prototype for a Class Definition}\description{These are old utility functions to construct, respectivelya list designed to represent the slots and superclasses anda list of prototype specifications. The \code{representation()}function is no longer useful, since the arguments \code{slots} and\code{contains} to \code{\link{setClass}} are now recommended.The \code{prototype()} function may still be used for thecorresponding argument, but asimple list of the same arguments works as well.}\usage{representation(...)prototype(...)}\arguments{\item{...}{The call to representation takes arguments that are single characterstrings. Unnamed arguments are classes that a newly defined classextends; named arguments name the explicit slots in the new class,and specify what class each slot should have.In the call to \code{prototype}, if an unnamed argument issupplied, it unconditionally forms the basis for the prototypeobject. Remaining arguments are taken to correspond to slots ofthis object. It is an error to supply more than one unnamed argument.}}\details{The \code{representation} function applies tests for the validity ofthe arguments. Each must specify the name of a class.The classes named don't have to exist when \code{representation} iscalled, but if they do, then the function will check for any duplicateslot names introduced by each of the inherited classes.The arguments to \code{prototype} are usually named initial valuesfor slots, plus an optional first argument that gives the objectitself. The unnamed argument is typically useful if there is a datapart to the definition (see the examples below).}\value{The value of \code{representation} is just the list of arguments, after these have been checkedfor validity.The value of \code{prototype} is the object to be used as theprototype. Slots will have been set consistently with thearguments, but the construction does \emph{not} use the classdefinition to test validity of the contents (it hardly can, sincethe prototype object is usually supplied to create the definition).}\references{Chambers, John M. (2008)\emph{Software for Data Analysis: Programming with R}Springer. (For the R version.)Chambers, John M. (1998)\emph{Programming with Data}Springer (For the original S4 version.)}\seealso{ \code{\link{setClass}} }\examples{## representation for a new class with a directly define slot "smooth"## which should be a "numeric" object, and extending class "track"representation("track", smooth ="numeric")\dontshow{prev <- getClassDef("class3")setClass("class1", representation(a="numeric", b = "character"))setClass("class2", representation(a2 = "numeric", b = "numeric"))try(setClass("class3", representation("class1", "class2"))){if(is.null(prev))stopifnot(!isClass("class3"))elsestopifnot(identical(getClassDef("class3"), prev))}}### >>> This *is* old syntax -- use 'contains=*, slots=*' instead <<<### ========== ---------- ------ ======%% Just kept here for "back compatibility" ...............setClass("Character",representation("character"))setClass("TypedCharacter",representation("Character",type="character"),prototype(character(0),type="plain"))ttt <- new("TypedCharacter", "foo", type = "character")\dontshow{stopifnot(identical(as(ttt, "character"), "foo"))}setClass("num1", representation(comment = "character"),contains = "numeric",prototype = prototype(pi, comment = "Start with pi"))\dontshow{stopifnot(identical(new("num1"), new("num1", pi, comment = "Start with pi")))for(cl in c("num1", "TypedCharacter", "Character", "class2", "class1"))removeClass(cl)}}\keyword{programming}\keyword{classes}