Martin Morgan wrote:

[...]



## Attempt two -- initialize
setClass("Element",
         representation=representation(conn="file"))

setMethod(initialize, "Element", function(.Object, ..., conn=file()) {
    callNextMethod(.Object, ..., conn=conn)
})

new("Element")
## oops, connection created but not closed; gc() closes (eventually)
## but with an ugly warning
## > gc()
##            used  (Mb) gc trigger  (Mb) max used  (Mb)
## Ncells   717240  38.4    1166886  62.4  1073225  57.4
## Vcells 37333395 284.9   63274729 482.8 60051033 458.2
## > gc()
##            used  (Mb) gc trigger  (Mb) max used  (Mb)
## Ncells   715906  38.3    1166886  62.4  1073225  57.4
## Vcells 37335626 284.9   63274729 482.8 60051033 458.2
## Warning messages:
## 1: closing unused connection 3 ()

setClass("ElementX", contains="Element")
## oops, two connections opened (!)

yes, that's because of the nonsense double call to the initializer while creating a subclass. the conceptual bug in the s4 system leads to this ridiculous behaviour in your essentially correct and useful pattern.

vQ

______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel

Reply via email to