r - on.exit 通过 eval 调用在函数结束之前触发

标签 r

知道为什么 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/

相关文章:

包中的递归 S3 调用

r - 为什么 R 需要数据框的名称?

r - 如何在 ggplot lineplot 中用相似颜色为多个子类着色?

r - 根据另一个数据表中两个字段的值范围为一个数据表中的字段分配值

r - 有效扩展R中的大数据框

R data.table 替换另一个 data.table 中的值索引

r - 如何同时按名称或其标准差选择列?

regex - ctags 和 R 正则表达式

r - ggplot - 查找刻面间距的坐标

r - 在将字符日期转换为 R 调查数据中的可用日期时处理 2000 与 1900