[Rd] S4: inheritance of validity methods?
Martin Morgan
mtmorgan at fhcrc.org
Tue Aug 18 15:42:48 CEST 2009
"Vitalie S." <vitosmail at rambler.ru> writes:
> Dear Developers,
>
> In current implementation of validity method, objects are first
> coerced to superclass (slots are striped). Thus, it is not possible
> to write validity method which would perform some checks on children
> slots.
>
> Say, I want to check if number of slots in a class is equal to "n":
>
> setClass("A", representation(a="numeric", n="integer"),
> prototype=list(a=12, n=1L),
> validity=function(object){
> if(length(slotNames(object))!=object at n+1) paste("Number
> of slots must be ", object at n)
> else TRUE
> })
>
>
> setClass("B", representation(b="numeric"), contains="A",
> prototype=list(a=12, b=14, n=2L))
>
>
> new("B", a=11, b=33)
> Error in validObject(.Object) :
> invalid class "B" object: Number of slots must be 2
>
> Error, because an object of class "A" is passed to validObject with
> one slot "b" removed and n=2.
>
> Is were a work around for this, or I am just doomed to write the same
> validity method for each children class?
I think you're doomed, but checking the number of slots in an instance
seems like a very unusual validity method -- isn't this the job of the
methods package, not your implementation of particular classes?
Martin
> Many thanks,
> Vitalie.
--
Martin Morgan
Computational Biology / Fred Hutchinson Cancer Research Center
1100 Fairview Ave. N.
PO Box 19024 Seattle, WA 98109
Location: Arnold Building M1 B861
Phone: (206) 667-2793
More information about the R-devel
mailing list