Hello (Heinrich),
I did not know I could do this. It doesn't seem to be documented anywhere.
Thought this would be helpful to the fraction of the community using package
R.oo. Note the call of a setMethodS3 method, xOne, in the setConstructorS3.
This is extremely useful if xOne (in this case) is a very complex method
(that you always want to be called every time you create a new object). If I
have something wrong please let me know! (I'm about to implement this in a
large'ish program.) Great package for OOP programming!
Example 1:
setConstructorS3("ClassA", function() {
this = extend(Object(), "ClassA",
.x=NULL
)
this$xOne() # this is useful!!!!!!!!!!!!!
this
})
setMethodS3("xOne", "ClassA", function(this,...) {
this$.x = 1
})
setMethodS3("getX", "ClassA", function(this,...) {
this$.x
})
So x is always 1:> a = ClassA()
> a$x
[1] 1
If you are new to R.oo: if you only want x to be 1 (I.e. xOne above is
simple) you should do something like this:
Example 2:
setConstructorS3("ClassA", function() {
this = extend(Object(), "ClassA",
.x=1
)
this
})
setMethodS3("getX", "ClassA", function(this,...) {
this$.x
})
> a = ClassA()
> a$x
[1] 1
The following further illustrates what you can do with Example 1 above:
Example 3:
setConstructorS3("ClassA", function() {
this = extend(Object(), "ClassA",
.x=NULL,
.y=1
)
this$xOne()
this$xPlusY()
this
})
setMethodS3("xOne", "ClassA", function(this,...) {
this$.x = 1
})
setMethodS3("xPlusY", "ClassA", function(this,...) {
this$.x = this$.x + this$.y
})
setMethodS3("getX", "ClassA", function(this,...) {
this$.x
})
> a = ClassA()
> a$x
[1] 2
Hope that helps!
Ben
[[alternative HTML version deleted]]