Hadley" Advanced R"本书包含以下我很难理解的例子。
第一次调用其中一个加法器函数时,add <- function(x) { function(y) x + y } adders <- lapply(1:10, add) adders[[1]](10) #> [1] 20 adders[[10]](10) #> [1] 20
会被懒惰地评估。此时,循环完成了 x的最终值为10.因此,所有加法器函数都将添加 10他们的意见,可能不是你想要的!
我检查确实,每个x
中的adders[[num]]
评估为10
。
get("x", envir=environment(adders[[2]])) # = 10
get("x", envir=environment(adders[[9]])) # = 10
但为什么呢?例如,当adders[[2]]
被定义为add(2)
的返回值时,此时x = 2
。根据哈德利的说法,&#34;一个函数保留了它所定义的环境。&#34;那么为什么没有adders[[2]]
保留x = 2
的环境?