From mtmorgan at fhcrc.org  Fri May 27 15:22:35 2011
From: mtmorgan at fhcrc.org (Martin Morgan)
Date: Fri, 27 May 2011 06:22:35 -0700
Subject: [Rd] Reference Classes/S4 Classes: can method dispatch check
 superclasses BEFORE resorting to method for "ANY"?
In-Reply-To: <4DDFA379.10904@googlemail.com>
References: <4DDFA379.10904@googlemail.com>
Message-ID: <4DDFA59B.9090807@fhcrc.org>

On 05/27/2011 06:13 AM, Janko Thyson wrote:
> Dear list,
>
> is it possible that method dispatch checks for superclasses/virtual
> classes before checking "ANY"?
>
> I'd like to build a generic initialization method for all my Reference
> Class (say "MyDataFrame") objects by having them inherit from class, say
> "MyRefClassVirtual" (which would have to be a virtual S4 class; there
> are no virtual Reference Classes, are there?)

Reference classes can be virtual; 'initialize' is a reference method, 
not an S4 method.

.A <- setRefClass("A", contains="VIRTUAL",
     methods=list(
       initialize=function(..., msg="initialize,AA") {
           callSuper(...)
           message(msg)
           .self
       }))
.AA <- setRefClass("AA", contains="A")

 > .A$new()
Error in methods::new(def, ...) :
   trying to generate an object from a virtual class ("A")
 > .AA$new()
initialize,AA
An object of class "AA"
<environment: 0x1b82f48>

Martin

> The problem is that 'getRefClass("MyDataFrame")$new' calls (I think) the
> method that was written for "ANY". Thus even though I write a explicit
> initialize method for class "MyRefClassVirtual" which I should be called
> for "MyDataFrame" as it inherits from this class, this method will never
> be called because "ANY beats anything else".
>
> So, I think I'd like to tell the method somehow to check for
> superclass/virtual classes *before* resorting to "ANY".
>
> Is that possible?
>
> Regards,
> Janko
>
> ______________________________________________
> R-devel at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-devel


-- 
Computational Biology
Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N. PO Box 19024 Seattle, WA 98109

Location: M1-B861
Telephone: 206 667-2793



[Rd] Reference Classes/S4 Classes: can method dispatch check superclasses BEFORE resorting to method for "ANY"?
Martin Morgan