为什么惰性求值不破坏这段代码?

Why doesn't lazy evaluation break this code?

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

在上面的代码中,Wickham 在 Advanced R 中声称,由于函数参数是延迟求值的,对于 lapply( 1:10,添加)。但在我 运行 R 会话中的代码之后情况并非如此,但据我所知,即使他的示例也没有证明上述代码的中断 - 这是为什么?

其中一条评论已经回答了问题:lapply 被修改为与 Wickham 当时写的行为不同。

如果您想更深入地研究它,这里是 R 开发电子邮件线程,其中更改了它:https://stat.ethz.ch/pipermail/r-devel/2015-February/070686.html

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