Я столкнулся с этой проблемой в нескольких отдельных случаях сейчас, и я хотел бы получить ваш вклад. В R объекты могут быть удалены или перезаписаны, но если они используют библиотеки R cpp, они будут продолжать делать то, что делают.
Например, при подключении к веб-сокету с помощью пакета websocket:
ws<-WebSocket$new(paste0(gate,"/?v=6&encoding=json"),autoConnect=F)
ws$onMessage(function(event) {
print(event)
})
ws$connect()
Объект ws теперь является моим единственным способом управления веб-сокетом, и если он удален или перезаписан, его невозможно отключить, кроме как перезапустить R.
Подобная проблема, когда используя более поздний пакет:
BumpUp<-function(.self){
.self$iter<-.self$iter+1
message("Valued bumped up to ",.self$iter)
if(.self$iter<10){
later::later(~.self$bump(),delay=1)
}
}
MakeTestObject<-setRefClass("testobject",fields=list(iter="numeric"),methods=list(bump=BumpUp))
testobj<-MakeTestObject(iter=0)
testobj$bump()
rm(testobj)
l oop, связанный с testobj, продолжает повторяться, несмотря на то, что сам объект был удален из памяти.
Есть ли способ сделать объект ссылочного класса проверить, если он все еще существует в памяти? В более общем смысле, возможно ли, чтобы объект знал свое имя в памяти?