Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/r/83.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在R中的引用类中实现dispose模式?_R_Garbage Collection_Dispose_Reference Class - Fatal编程技术网

如何在R中的引用类中实现dispose模式?

如何在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的副本,而不删除对

我目前正在编写一个与DBI兼容的数据库接口。DBI框架规定了一种方法“dbClearResult”,如:“释放与结果集关联的所有资源(本地和远程)”。我有一个R RC对象,其中包含连接和DB结果集上的元数据,我希望对其进行处理,以便进行垃圾收集。将外部方法编写为

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