From vitosmail at rambler.ru  Tue Aug 18 17:19:17 2009
From: vitosmail at rambler.ru (Vitalie S.)
Date: Tue, 18 Aug 2009 17:19:17 +0200
Subject: [Rd] S4: inheritance of validity methods?
In-Reply-To: <6phocqdxmp3.fsf@gopher4.fhcrc.org>
References: <op.uyti9if2dacko8@tir-070312.staff.few.eur.nl>
	<6phocqdxmp3.fsf@gopher4.fhcrc.org>
Message-ID: <op.uyu56f0mdacko8@tir-070312.staff.few.eur.nl>

On Tue, 18 Aug 2009 15:42:48 +0200, Martin Morgan <mtmorgan at fhcrc.org>  
wrote:

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

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


--



[Rd] S4: inheritance of validity methods?
Vitalie S.