关于r:外部包的引用类继承

Reference class inheritance from external package

我正试图重写一个引用类方法。因为引用类方法是绑定到类而不是对象的,所以我相信为了做到这一点,我需要定义一个从旧引用类继承的新引用类。但是,我尝试从中继承的类是在我的外部包(dpylr)中定义的。我找不到正确的语法来完成这项工作,contains似乎只需要一个文本名,而不在外部包中搜索类定义。

特别是,我尝试从dpylr继承dbisobser引用类,并重写finalize方法。

这将正确地找到父类,但由于它来自不同的包,因此无法分配给它。

1
2
3
4
5
6
7
8
9
10
11
NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = 'DbDisconnector',
  methods = list(
    finalize = function() {
      message("test")
    }
  ),
  where=getNamespace('dplyr')
)
# Error in assign(mname, def, where) (from file.r#75) :
#  cannot add bindings to a locked environment

只包含接受字符串的方法,不能只从GetRefClass中为它们提供RefClass定义。

1
2
3
4
5
6
7
8
9
10
NewDbDisconnector <- setRefClass("NewDbDisconnector",
  contains = getRefClass("DbDisconnector", getNamespace("dplyr")),
  methods = list(
    finalize = function() {
      message("test")
    }
  )
)
# Error in FUN(X[[1L]], ...) :
#  the 'contains' argument should be the names of superclasses:  got an element of class"name"

我想这应该是可能的,我就是想不出正确的方法。


可以将超类导入到环境中:

1
DbDisconnector <- getFromNamespace("DbDisconnector","dplyr")

然后把EDOCX1[0]放在你的班上。