我正在使用具有“openConnection”功能的专有库,我使用它:
conn <- openConnection("user", "pass")
# do some stuff with 'conn' that may return early or throw exceptions
closeConnection(conn)
无论当前方法如何退出,确保连接关闭的R语言是什么?在C ++中它将是RAII,在Java中它可能是一个“最终”块。 R是什么?
答案 0 :(得分:1)
通常,只使用on.exit
调用,但您需要在函数内执行此操作。
f <- function() {
conn <- openConnection("user", "pass")
on.exit(close(conn))
# use conn...
readLines(conn)
} # on.exit is run here...
一种常见的情况是,当您传递连接或文件名时,如果您获得了文件名,则应该只创建(并关闭)连接:
myRead <- function(file) {
conn <- file
if (!inherits(file, "connection")) {
conn <- file(file, "r")
on.exit(close(conn))
} # else just use the connection...
readLines(conn)
} # on.exit runs here...
# Try it out:
cat("hello\nworld\n", file="foo.txt")
myRead("foo.txt") # file
myRead(stdin()) # connection