如何在R中的引用类中实现dispose模式?
我目前正在编写一个与DBI兼容的数据库接口。DBI框架规定了一种方法“dbClearResult”,如:“释放与结果集关联的所有资源(本地和远程)”。我有一个R RC对象,其中包含连接和DB结果集上的元数据,我希望对其进行处理,以便进行垃圾收集。将外部方法编写为如何在R中的引用类中实现dispose模式?,r,garbage-collection,dispose,reference-class,R,Garbage Collection,Dispose,Reference Class,我目前正在编写一个与DBI兼容的数据库接口。DBI框架规定了一种方法“dbClearResult”,如:“释放与结果集关联的所有资源(本地和远程)”。我有一个R RC对象,其中包含连接和DB结果集上的元数据,我希望对其进行处理,以便进行垃圾收集。将外部方法编写为 setMethod("dbClearResult", signature(res="MyResult"), def=function(res) rm(res) ) 当然不起作用,因为它只删除res的副本,而不删除对
setMethod("dbClearResult", signature(res="MyResult"),
def=function(res) rm(res)
)
当然不起作用,因为它只删除res的副本,而不删除对象(修改时复制)。从这里通过方法的父环境访问对象也可能不是一个解决方案,因为引用名称未知-必须给方法一个字符串,而不是对象(signature=“character”),这是DBI泛型不允许的
因此,我想将一个方法实现到一个R引用类中,该类处理其对象并释放R中的资源,例如:
t <- setRefClass("t", methods = list(
dispose = function(.self) {
rm(.self)
gc() # (optional)
})
)
test <- t$new()
test$dispose()
t