如何在R中的引用类中实现一个配置模式?

时间:2015-12-23 20:56:06

标签: r garbage-collection dispose reference-class

我目前正在编写符合DBI的数据库接口。 DBI框架规定了一个方法'dbClearResult',如下所示:“释放与结果集相关的所有资源(本地和远程)”。我有一个R RC对象包含连接和数据库结果集的元数据,我想要处理它,以便可以进行垃圾收集。将外部方法编写为

setMethod("dbClearResult", signature(res="MyResult"),
          def=function(res) rm(res)
)

当然不起作用,因为它只删除它的res副本,而不是对象(copy-on-modify)。通过方法的父环境从这里访问对象也可能不是解决方案,因为引用名称是未知的 - 必须给方法一个字符串而不是一个对象(signature =“character”),这是不允许的由DBI通用。

因此,我想将一个方法实现到一个R引用类中,该引用类处理它的对象并释放R中的资源,例如:像:

    t <- setRefClass("t", methods = list(
                            dispose = function(.self) {
                                rm(.self)
                                gc() # (optional)
                            })
                  )

test <- t$new()

test$dispose()

此代码不能通过.self本身只能读取,而不能修改。所以我的想法是在父环境中搜索对象的引用并删除它们。

问题:
- 有更好的方法吗?
- 如何识别参考文献?

0 个答案:

没有答案
相关问题