执行`sys.on.exit()`返回的代码,为什么`eval(sys.on.exit())`不起作用?

时间:2017-04-11 19:11:13

标签: r

我正在使用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())没有?

0 个答案:

没有答案