我有一个类层次结构,其超类fb
不应该存在任何对象(我尝试了虚拟类,但遇到了无法从虚拟类初始化对象的问题)。此外,我有两个具有相同插槽的子类 ( foo
, )。bar
现在我想创建一个新对象,对超类使用初始化方法,该方法根据某个值返回子类之一的对象:
setClass("fb", representation( x = "numeric"))
setClass("foo", contains = "fb")
setClass("bar", contains = "fb")
setMethod("initialize", "fb", function(.Object, x) {
if (x < 5) class(.Object) <- "foo"
else class(.Object) <- "bar"
.Object@x <- x
.Object
})
> new("fb", x = 3)
Error in initialize(value, ...) :
initialize method returned an object of class "foo" instead of the required class "fb"
显然(并且可能有充分的理由)R 不允许这样做。有没有办法在方法中实现我想要的,而不是在创建新对象时使用 if-else 构造?