evaluation revisited
Wacek Kusnierczyk wrote:
Gabor Grothendieck wrote:
The argument to eval.parent is evaluated before eval.parent
ever sees it.
really? eval.parent is just a regular r function, a wrapper for eval with envir=parent.frame(). the arguments to eval.parent are passed to eval *unevaluated* (as promises), and are only evaluated when eval needs them.
to be strict, the argument n to eval.parent is not further passed to
eval, and is evaluated before eval is called. the above referred to the
'expr' argument to eval.parent. one more example:
my.eval.parent = function(expr, n=1) {
print('foo')
p = parent.frame(n+1)
eval(expr, p) }
trace(eval)
my.eval.parent({print('expr'); 1}, {print('n'); 1})
# "foo"
# "n"
# trace eval(expr, p)
# "expr"
# 1
vQ