add <- function(x) {
function(y) x + y
}
adders <- lapply(1:10, add)
adders[[1]](10)
Run Code Online (Sandbox Code Playgroud)
在上面的代码中,Wickham在Advanced R中声称因为函数参数被懒惰地评估,对于由lapply(1:10,add)创建的所有闭包,x将为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