知道为什么 eval 实现在函数结束之前触发回调吗?
# on.exit fires on exit
exit_test1 = function(){
on.exit(expr = message('close'))
message('hello')
}
exit_test1()
#> hello
#> close
# on.exit fires before exit
exit_test2 = function(){
eval(parse(text = "on.exit(expr = message('close'))"))
message('hello')
}
exit_test2()
#> close
#> hello
最佳答案
eval_bare
的文档中提到了这一点。 eval
不会在正确的框架环境中评估 on.exit()
。
exit_test2 = function() {
exit_cmd = quote(on.exit(expr = message('close 2')))
message('hello')
rlang::eval_bare(exit_cmd)
message('hello')
}
exit_test2()
#> hello
#> hello
#> close 2
关于r - on.exit 通过 eval 调用在函数结束之前触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64821278/