From l@wrence@mich@el @ending from gene@com  Thu Jan 10 20:05:40 2019
From: l@wrence@mich@el @ending from gene@com (Michael Lawrence)
Date: Thu, 10 Jan 2019 11:05:40 -0800
Subject: [Rd] setClass accepts slot-mismatch between slots and prototype
 arguments
In-Reply-To: <CAF8bMcbPCvsWx2o3iTHpXGFAT=azDdMZXz7Uiznr_jOZBbyKcw@mail.gmail.com>
References: <CAF8bMcbPCvsWx2o3iTHpXGFAT=azDdMZXz7Uiznr_jOZBbyKcw@mail.gmail.com>
Message-ID: <CAOQ5NyeE6D29PEBL7ntWk3Pr=v1bZsaGv9FcgC-iGkb-ioZ+PA@mail.gmail.com>

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 at 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 at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel



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