引用类继承方法

时间:2017-01-20 21:12:12

标签: r inheritance reference-class

我正在重新分解一个包以使用引用类并遇到方法继承的问题。

我有一个类B,其中包含(继承)A。但是,我无法调用任何继承的类'B'实例的方法。事实上,它们甚至不存在于对象中。

如何定义从其他类继承方法的引用类?继承的方法是通用的是否重要?

这是一个展示问题的自包含示例:

A <- setRefClass("A", fields=c("f1", "f2"))

B <- setRefClass("B", fields=c("f3"), contains="A")

setGeneric("f", function(.self) standardGeneric("f"))

setMethod(f,
  signature = c(.self="A"),
  definition = function(.self) {
    print("Hello from class A")
  }
)

setMethod(f, signature = c(.self="B"),
  definition = function(.self) {
    print("Hello from class B")
  }
)

A$methods(f=f)

a <- A$new()
b <- B$new()

调用方法:

> a$f()
[1] "Hello from class A"

> b$f()
Error in envRefInferField(x, what, getClass(class(x)), selfEnv) : 
  ‘f’ is not a valid field or method name for reference class “B”

# Should print "Hello from class B"

1 个答案:

答案 0 :(得分:3)

我认为这只是顺序问题:{B}在定义B类之后执行。执行顺序的简单修改有助于:

A$methods(f=f)