为什么懒惰的评估不会破坏此代码?

时间:2018-10-03 16:09:12

标签: r lazy-evaluation

add <- function(x) {
  function(y) x + y
}
adders <- lapply(1:10, add)
adders[[1]](10)

在上面的代码中,Wickham在 Advanced R 中声称,由于函数参数是惰性计算的,对于lapply(1:10,add)创建的所有闭包,x将为10。但是,在我在R会话中运行代码后情况并非如此,但就我所知,即使是他的示例也没有证明上述代码的破绽-为什么?

1 个答案:

答案 0 :(得分:9)

其中一条评论已经回答了这个问题:lapply被修改为具有与当时威克姆所写内容不同的行为。

如果您想进一步研究它,这里是R开发电子邮件线程的更改之处:https://stat.ethz.ch/pipermail/r-devel/2015-February/070686.html

下面是Hadley Wickham讨论的示例如何在 Advanced R 的下一版本中修复:https://github.com/hadley/adv-r/issues/803