It's the result of fixing a previous bug ( that Martin Maechler
uncovered).  Suppose that "A" was on another package.  Then the result
of as(new("B"), "A") had the wrong package in its class.

The construction of the as() method stored in the "contains" slot of
class "B" will generate an object from "A" in order to get the correct
class to assign when coercing to "A".

The relevant code in methods:::.simpleCoerceExpr in RClassUtils.R is:

    if(!isVirtualClass(toDef))
        toClass <- class(new(toDef)) # get it with the package slot correct

(Of course this is only done once)

John


Martin Morgan wrote:
> These lines of code
>
> setClass("A", representation(x="numeric"))
> setMethod(initialize, "A", function(.Object, ...) stop("oops"))
> setClass("B", representation("A"))
>
> result in
>
>   
>> setClass("B", representation("A"))
>>     
> Error in initialize(value, ...) : oops
>
> in
>
> R version 2.9.0 alpha (2009-03-28 r48239)
> R version 2.10.0 Under development (unstable) (2009-03-28 r48239) 
>
> but not in r48182. 
>
> In addition, in package code, the error above does NOT lead to removal
> of the partially installed package, or of the lock on the package
> directory, corrupting the user installation.
>
> For more context, the actual code adds arguments to initialize and
> expects them to be provided by calls to 'new'; 'new' is not exposed
> directly to the user but via a constructor that always provides
> appropriate arguments. A specific example occurs when trying to
> install the package Biostrings v 2.11.44 from the Bioconductor devel
> repository.
>
> Martin
>   

	[[alternative HTML version deleted]]

