【发布时间】:2020-03-12 22:04:59
【问题描述】:
给定以下函数
f <- function(x) {
g <- function(y) {
y + z
}
z <- 4
x + g(x)
}
如果有人在 R 中运行以下代码,为什么答案是 10?我对你如何参与这个问题有点困惑。
z <- 10
f(3)
【问题讨论】:
-
它正在从函数 env 中获取“z”
-
函数最后不就是在做
4 + 2*x吗?其中 4 = z -
@markus 是的,但问题是,为什么 z = 4?期望函数定义捕获 z = 10 是合理的。
-
@RobertDodier 它检查第一个环境中的变量,即在函数中,找到它并停止寻找其他地方,即在父环境中。您可以通过重命名函数内的“z”来进行测试,即函数内的
z1 <- 4和f(3)# [1] 16 -
或者指定环境即
z <- 4; environment(g) <- .GlobalEnv然后调用z <- 10 > f(3) [1] 16