From jon.clayden at gmail.com  Thu Oct 28 19:55:59 2010
From: jon.clayden at gmail.com (Jon Clayden)
Date: Thu, 28 Oct 2010 18:55:59 +0100
Subject: [Rd] Reference Classes: Generalizing Reference Class Generator
	objects?
In-Reply-To: <4CC9B20B.1020204@alum.mit.edu>
References: <4CC98517.3050605@alum.mit.edu>
	<AANLkTin6WXF-mMy_whb_cYuiKqrYw+Q3yP+D8NbRRpcO@mail.gmail.com>
	<4CC9B20B.1020204@alum.mit.edu>
Message-ID: <AANLkTineuXeTVGMGfpWJRi0P0G5BYhqwGej5-TFU9txs@mail.gmail.com>

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



[Rd] Reference Classes: Generalizing Reference Class Generator objects?
Jon Clayden