[Rd] setClass accepts slot-mismatch between slots and prototype arguments

Michael Lawrence l@wrence@mich@el @ending from gene@com
Thu Jan 10 20:05:40 CET 2019


Thanks for the report. There is a comment from 2001 in the header for
reconcilePropertiesAndPrototype() that states:

"The prototype may imply slots not in the properties list.  It is not
required that the extends classes be define at this time.  Should it
be?"

But somewhere in the mid 2000's, I think, it became necessary for the
extends classes to be defined, so it may be safe to add this
constraint.

I'll commit a fix soon. While fixing, I found that the type
consistency check for slots shared with superclasses was completely
broken ever since it was written in 2002.

Michael

On Thu, Jan 10, 2019 at 8:31 AM William Dunlap via R-devel
<r-devel using r-project.org> wrote:
>
> I was installing the 'diffobj' package into TERR and got an error from the
> call
> StyleSummary <- setClass("StyleSummary",
>   slots=c(container="ANY", body="ANY", map="ANY"),
>   prototype=list(
>     container=function(x) sprintf("\n%s\n", paste0(x, collapse="")),
>     body=identity,
>     detail=function(x) sprintf("\n%s\n", paste0("  ", x, collapse="")),
>     map=function(x) sprintf("\n%s", paste0("  ", x, collapse="\n"))
>   ))
> because the prototype contained components not in the slots list.  R does
> not complain about the mismatch, but new("StyleSummary") does name make
> something with a 'detail' slot.  Should this be an error?
>
> I suspect that the package writer intended to include 'detail' in the slots
> argument.
>
> Bill Dunlap
> TIBCO Software
> wdunlap tibco.com
>
>         [[alternative HTML version deleted]]
>
> ______________________________________________
> R-devel using r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



More information about the R-devel mailing list