我目前正在编写符合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本身只能读取,而不能修改。所以我的想法是在父环境中搜索对象的引用并删除它们。
问题:
- 有更好的方法吗?
- 如何识别参考文献?