Reference Classes: Generalizing Reference Class Generator objects?
?ReferenceClasses says "Reference methods can not themselves be generic functions; if you want additional function-based method dispatch, write a separate generic function and call that from the method". So I think you'd need to take that approach in your "initialize" method. Hope this helps, Jon
On 28 October 2010 18:25, Daniel Lee <bearlee at alum.mit.edu> wrote:
Thank you. Your example really clarifies what the $initialize(...) function is supposed to do. Do you know if there is a straightforward way to dispatch the $new(...) method based on the signature of the arguments? I am thinking along the lines of S4 methods with valid signatures. Thanks again for the example. On 10/28/2010 12:12 PM, Jon Clayden wrote:
Sorry - you don't need to assign the value of initFields(). I was
going to do it in two lines but then realised one was enough... :)
TestClass<- setRefClass ("TestClass",
? ? ? ?fields = list (text = "character"),
? ? ? ?methods = list (
? ? ? ? ? ? ? ?initialize = function (text) {
initFields(text=paste(text,"\n")) },
? ? ? ? ? ? ? ?print = function () ?{ cat(text) } )
)
All the best,
Jon
On 28 October 2010 15:13, Daniel Lee<bearlee at alum.mit.edu> ?wrote:
Is it possible to override the $new(...) in the reference class
generator? I
have tried adding a "new" method to the methods of the class, but that is
obviously not correct. I have also tried adding it to the class
generator,
but the class generator still uses the default constructor.
As a simple example, this is the current interface:
TestClass<- setRefClass ("TestClass",
? ? ? ?fields = list (text = "character"),
? ? ? ?methods = list (
? ? ? ? ? ? ? ?print = function () ?{cat(text)})
)
test<- TestClass$new (text="Hello World")
test$print()
I would like to override $new(...) to be something like (add a "\n" to
the
end of the input, no need to specify input fields):
TestClass$methods (new = function (text) {
? ? ? ? ? ?text<- paste (text, "\n")
? ? ? ? ? ?methods:::new (def, text=text)
? ? ? ?})
The constructor would then be:
test<- TestClass$new ("Hello World")
This is a subtle, but useful change. I have also tried adding to
TestClass a
method $newInstance(text), but that was not successful. If this is not
possible, could we consider augmenting the Reference Class interface to
include constructors?
______________________________________________ R-devel at r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel