?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 <bear...@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<bear...@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@r-project.org mailing list >>> https://stat.ethz.ch/mailman/listinfo/r-devel >>> > ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel