Seth Falcon wrote:
 > Thomas Petzoldt <[EMAIL PROTECTED]> writes:
 >> One odd thing I found was that initialize does obviously not allow to
 >> incorporate additional named parameters which are not slots.
 >
 > ?!  Does for me:


Your example works but one can not arbitrarily mix slots, other named 
arguments and the default callNextMethod(). The documentation states:

"...    Data to include in the new object. Named arguments correspond to 
slots in the class definition."


Here is my example (extended from yours):

setClass("FOO", representation(x="numeric", y="numeric"))

setMethod("initialize", "FOO",
          function(.Object, y, value) {
               callNextMethod()
              [EMAIL PROTECTED] <- value * 2
              .Object
          })

new("FOO", y=1, value=2)

An object of class "FOO"
Slot "x":
[1] 4

Slot "y":
numeric(0)

What is different from what I originally expected. In such cases one has 
to add the arguments to callNextMethod(y=1) explicitly.

 >> In essence I think that one should not use the constructor approach
 >> (from 2001) anymore, even if the "call is independent of the details
 >> of the representation".
 >
 > Sometimes both are useful.  You can have convenience generator
 > functions for users, but have initialize methods that get called
 > internally.  This can also be nice in that the internal code can be
 > lean, while common user-facing code can do lots of error and sanity
 > checking, etc.

I see, and for the moment I let the constructors in the package, but 
they only provide now some class specific defaults and then call the 
(inherited) initialize method via new.

Thomas

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

Reply via email to