On Tue, 18 Aug 2009 15:42:48 +0200, Martin Morgan <mtmor...@fhcrc.org>
wrote:
"Vitalie S." <vitosm...@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))!=obj...@n+1) paste("Number
of slots must be ", obj...@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?
That was a toy example. In fact that I need is to ensure that some
specific slots have the same length. Names of these slots are kept in
separate slot (@atributes).
I think it's not an insane idea to require a predefined relationship to
hold between "future" children's slots.
To be honest, I find it hard to think of a compelling reason to convert
the object before testing the validity. What can possibly go wrong if
children slots are kept in place?
Vitalie.
Martin
Many thanks,
Vitalie.
--
______________________________________________
R-devel@r-project.org mailing list
https://stat.ethz.ch/mailman/listinfo/r-devel