Hadley" Advanced R"中的懒惰评估示例书

时间:2014-08-12 22:13:06

标签: r function lazy-evaluation

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的环境?

0 个答案:

没有答案