在以下示例中,我尝试使用env_get
. 第一位按预期工作。
library(rlang)
e1 <- env(a = 'a')
# works as expected
f <- function() {
env_get(
env = caller_env(),
nm = 'a',
inherit = TRUE,
default = 'not found')
}
exec(f, .env = e1)
#> [1] "a"
# two levels deep of function calls doesn't work even though inherit = TRUE
g <- function() f()
exec(g, .env=e1)
#> [1] "not found"
# modifying the depth of caller_env in f does work
f <- function() {
env_get(
env = caller_env(2), # <------ changing this
nm = 'a',
inherit = TRUE,
default = 'not found')
}
exec(g, .env=e1)
#> [1] "a"
由reprex 包于 2021-12-28 创建(v2.0.1)
我希望第二位,调用exec
withg
会.env=e1
起作用,因为调用env_get
has inherit=TRUE
。我的理解是它会在 中caller_env
查找,什么也没有,然后在其父项中查找"a"
,但这不起作用。进一步让我感到困惑的是,当我明确指示env_get
向上查找 2 个级别时,这确实有效。
我对这种继承应该如何工作有误解吗?