忽略 parent/ancestor 函数内的环境(禁用词法范围)

ignore parent/ancestor environments inside function (disable lexical scoping)

有没有办法在 R 中禁用词法范围?我想阻止函数使用它的任何 parent/ancestor 环境。所需的行为是下面的错误(x 未找到)。

x <- 1
f <- function() 
  eval(parse(text = "x"), 
       envir = new.env(), 
       enclos = new.env())
f() # returns 1

您可以将函数的环境设置为baseenv(),不会搜索全局环境

x <- 1
f <- function() return(x);
environment(f) <- baseenv()
f() 
# Error in f() : object 'x' not found

这并没有 "disable" 词法范围,因为它改变了搜索以跳过全局环境。

如果需要,您可以将 baseenv()eval(envir=)new.env(parent=) 参数一起使用。

x <- 1
f <- function() 
  eval(parse(text = "x"), 
       envir = baseenv())
f()
# Error in eval(expr, envir, enclos) : object 'x' not found