【发布时间】:2021-08-10 19:58:16
【问题描述】:
我想在一个环境中定义一个函数,它使用来自这个环境的全局变量:
e <- new.env()
e$a <- 1
e$f <- function() a
## e$f()
## Error in e$f() : object 'a' not found
environment(e$f) <- e
e$f()
# [1] 1
到目前为止一切顺利。现在假设我向e 添加另一个(锁定的)绑定:
e$b <- 2
lockBinding("b", e)
我如何(暂时)从f 中解锁此绑定不使用 符号e?
e$f <- function() unlockBinding("b", parent.frame())
environment(e$f) <- e
e$f()
不起作用,因为parent.frame 没有正确指向e。
我不想直接使用e,因为这会在我克隆环境后立即中断:
e <- new.env()
e$a <- e$b <- 1
lockBinding("b", e)
e$f <- function() unlockBinding("b", e)
environment(e$f) <- e
## e$b <- 3
## Error in e$b <- 3 : cannot change value of locked binding for 'b'
g <- rlang::env_clone(e)
g$f()
e$b <- 3 ## should not work
【问题讨论】:
标签: r environment