With this set-up
options(warn = 1)
tf <- tempfile()
finalizer <- function(obj) {
message("finalizer")
close(obj$f)
}
this code works
ev <- new.env()
ev$f <- file(tf, "w")
reg.finalizer(ev, finalizer)
rm(ev)
gc()
whereas this (reversing the order of file() and reg.finalizer())
ev <- new.env()
reg.finalizer(ev, finalizer)
ev$f <- file(tf, "w")
rm(ev)
produces
Warning: closing unused connection 3 (/tmp/Rtmp9CWLtN/file6998ee7b)
finalizer
Error in close.connection(obj$f) : invalid connection
In some respects, it seems like the user should get a chance to clean up
their mess before the system does it for them, so the above seems like a bug.
But maybe there is another way to understand this?
Martin