[Rd] on.exit() & sys.on.exit(): Calling them via eval() does not work as hoped

Henrik Bengtsson hb at biostat.ucsf.edu
Sun Nov 3 05:24:03 CET 2013


Why does the following eval() call on sys.on.exit() not return what I
expect/evaluate in the proper environment?

foo <- function() {
  cat("foo()...\n");
  on.exit( message("exiting") )

  cat("sys.on.exit():\n")
  res <- sys.on.exit()
  print(res)

  cat("eval(sys.on.exit()):\n")
  expr <- quote(sys.on.exit())
  print(expr)
  res <- eval(expr)
  print(res)

  cat("foo()...done\n")
}

> foo()
foo()...
sys.on.exit():
message("exiting")
eval(sys.on.exit()):
sys.on.exit()
NULL
foo()...done
exiting

Similar problems appear when I try to "record" on.exit() expressions
via eval().  It appears that the "primitives" on.exit() and
sys.on.exit() do something rather special.  Is there a solution to
what I'm trying to do?

The reason why I'm doing this in the first place, is that I'm trying
to implement onExit(<expr>, where="replace"), onExit(<expr>,
where="last"), and onExit(<expr>, where="first").

Thanks,

Henrik



More information about the R-devel mailing list