From bearlee at alum.mit.edu  Thu Oct 28 19:25:31 2010
From: bearlee at alum.mit.edu (Daniel Lee)
Date: Thu, 28 Oct 2010 13:25:31 -0400
Subject: [Rd] Reference Classes: Generalizing Reference Class Generator
 objects?
In-Reply-To: <AANLkTin6WXF-mMy_whb_cYuiKqrYw+Q3yP+D8NbRRpcO@mail.gmail.com>
References: <4CC98517.3050605@alum.mit.edu>
	<AANLkTin6WXF-mMy_whb_cYuiKqrYw+Q3yP+D8NbRRpcO@mail.gmail.com>
Message-ID: <4CC9B20B.1020204@alum.mit.edu>

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
>>



[Rd] Reference Classes: Generalizing Reference Class Generator objects?
Daniel Lee