Hi Peter, Peter Ruckdeschel <[EMAIL PROTECTED]> writes: > ## now: B00 mother class to B01 and B02, and again B02 "contains" B01 by > setIs: > setClass("B00", representation(a="numeric")) > setClass("B01", representation(a="numeric",b="numeric"), contains= "B00") > setClass("B02", representation(a="numeric",d="numeric"), contains= "B00") > setIs("B02","B01",coerce=function(obj){new("B01", [EMAIL PROTECTED], [EMAIL > PROTECTED])}, > replace=function(obj,value){new("B01", [EMAIL PROTECTED], [EMAIL > PROTECTED])}) > > # now two "+" methods for B00 and B01 > setMethod("+", signature=c("B00","B00"), function(e1,e2)[EMAIL PROTECTED]@a}) > setMethod("+", signature=c("B01","B01"), function(e1,e2)[EMAIL PROTECTED]@b}) > > x1=new("B02", a=1, d=2) > x2=new("B02", a=1, d=3) > > x1+x2 ## 2 --- why?
My impression from reading over the man page for setIs, is that it isn't intended to be used to override the existing inheritance hierarchy. It also mentions that the return value is the extension info as a list, so that could also be useful in understanding what setIs is doing. Here's the output for your example: Slots: Name: a d Class: numeric numeric Extends: Class "B00", directly Class "B01", directly, with explicit coerce Use the contains arg of setClass to define the superclasses. With the contains arg, the order determines the precedence for method lookup. But I suspect you know that already. > Is there a possibility to force usage of the B01 method /without/ > explicitely coercing x1,x2 to B01, i.e. interfere in the dispatching > precedence, telling R somehow (by particular arguments for setIs ?) > to always use the is-relation defined by setIs first before mounting > the hierarchy tree? Perhaps explaining a bit more about what you are trying to accomplish will allow someone to provide a more helpful suggestion than mine :-) If you know the inheritance structure you want before run-time, then I'm not seeing why you wouldn't just use the contains arg. And if you want to force certain behavior at run-time, then I don't see what's wrong with an explicit coercion using as(foo, "bar"). But perhaps I'm missing something. Cheers, + seth ______________________________________________ R-devel@r-project.org mailing list https://stat.ethz.ch/mailman/listinfo/r-devel