代码之家  ›  专栏  ›  技术社区  ›  AaronP

将函数绑定到环境以访问存储的变量,其缺点是什么?

  •  0
  • AaronP  · 技术社区  · 7 年前

    问题: .GlobalEnv .

    当前解决方案:

    例子:

    library(rlang)
    foo <- function(a, b){
      bar <- function(c){
        out <- a + b + c
        out
      }
      set_env(bar, get_env())
      bar
    }
    bar <- foo(1, 2)
    bar(3)
    

    我坚信这种方法有缺点,但我无法指出这些缺点是什么。如果你能帮助我,我会很高兴。

    1 回复  |  直到 7 年前
        1
  •  1
  •   Hong Ooi    7 年前

    这没什么错。您也不需要rlang:

    foo <- function(a, b)
    {
        function(c) a + b + c
    }
    
    bar <- foo(1, 2)
    bar(3)
    

    的返回值 foo 的环境。

    这干扰了事情应该如何运作。为了防止这种情况,您可以显式创建一个不同于 的环境:

    foo <- function(a, b)
    {
        bar <- function(c) a + b + c
        environment(bar) <- new.env(parent=globalenv())
        bar
    }
    

    但这几乎没有必要。