我正在使用on.exit()
函数来确保在可能失败的部分之后执行清理代码。在最简单的情况下,它是
fun1 = function(){
# Turn on clean up on exit
on.exit({
message('Cleaning Up')
})
message('Function finishes')
}
fun1()
# Function finishes
# Cleaning Up
有时,我希望在函数完成之前运行清理代码。
我是通过on.exit
通过sys.on.exit
获取先前提供的代码并将函数eval
应用于此来实现此目的的。
fun2 = function(){
# Turn on clean up on exit
on.exit({
message('Cleaning Up')
})
# Cleaning up before function ends
tmp = sys.on.exit()
eval(tmp)
# Turn off clean up on exit
on.exit()
message('Function finishes')
}
fun2()
# Cleaning Up
# Function finishes
但是,如果不使用中间变量tmp
并将代码简化为eval(sys.on.exit())
则不会清理。
fun3 = function(){
# Turn on the clean up on exit
on.exit({
message('Cleaning Up')
})
# Cleaning up before function ends
eval(sys.on.exit())
# Turn off the clean up on exit
on.exit()
message('Function finishes')
}
fun3()
# Function finishes
有人可以解释为什么tmp=sys.on.exit();eval(tmp)
有效,eval(sys.on.exit())
没有?