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?