参考Class个继承方法
Reference Class inheriting methods
我正在重构一个包以使用引用 classes 和 运行 成为方法继承的问题。
我有一个 class、B
,其中包含(继承)A
。但是,我无法为继承的 class 'B' 实例调用任何方法。事实上,它们甚至不存在于对象中。
如何定义从另一个 class 继承方法的引用 class?继承的方法是通用的重要吗?
这是一个演示问题的独立示例:
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"
我觉得只是顺序的问题:A$methods(f=f)
在class的定义之后执行 B.简单修改执行顺序有帮助:
A <- setRefClass("A", fields=c("f1", "f2"))
setGeneric("f", function(.self) standardGeneric("f"))
setMethod(f,
signature = c(.self="A"),
definition = function(.self) {
print("Hello from class A")
}
)
A$methods(f=f)
B <- setRefClass("B", fields=c("f3"), contains="A")
setMethod(f, signature = c(.self="B"),
definition = function(.self) {
print("Hello from class B")
}
)
a <- A$new()
b <- B$new()
a$f()
#[1] "Hello from class A"
b$f()
#[1] "Hello from class B"
我正在重构一个包以使用引用 classes 和 运行 成为方法继承的问题。
我有一个 class、B
,其中包含(继承)A
。但是,我无法为继承的 class 'B' 实例调用任何方法。事实上,它们甚至不存在于对象中。
如何定义从另一个 class 继承方法的引用 class?继承的方法是通用的重要吗?
这是一个演示问题的独立示例:
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"
我觉得只是顺序的问题:A$methods(f=f)
在class的定义之后执行 B.简单修改执行顺序有帮助:
A <- setRefClass("A", fields=c("f1", "f2"))
setGeneric("f", function(.self) standardGeneric("f"))
setMethod(f,
signature = c(.self="A"),
definition = function(.self) {
print("Hello from class A")
}
)
A$methods(f=f)
B <- setRefClass("B", fields=c("f3"), contains="A")
setMethod(f, signature = c(.self="B"),
definition = function(.self) {
print("Hello from class B")
}
)
a <- A$new()
b <- B$new()
a$f()
#[1] "Hello from class A"
b$f()
#[1] "Hello from class B"