解释一个懒惰的评价怪癖我正在阅读Hadley Wickhams关于Github的书,特别是关于懒惰评估的这一部分。在那里,他举例说明了懒惰评估的后果,在有add/adders功能的部分。让我引用一下:在使用lapply或循环创建闭包时,[懒惰评估]很重要:add <- function(x) {
function(y) x + y}adders <- lapply(1:10, add)adders[[1]](10)adders[[10]](10)在第一次调用其中一个加法器函数时,会对x进行延迟计算。此时,循环完成,x的最终值为10.因此,所有加法器函数都会在其输入上添加10,可能不是您想要的!手动强制评估修复了问题:add <- function(x) {
force(x)
function(y) x + y}adders2 <- lapply(1:10, add)adders2[[1]](10)adders2[[10]](10)我似乎不明白那一点,而且那里的解释很少。有人可以详细说明这个特定的例子,并解释那里发生了什么?我特别对句子感到困惑“此时,循环完成,x的最终值为10”。什么循环?什么最终价值,在哪里?一定是简单的我想念,但我只是没有看到它。非常感谢提前。
- 2 回答
- 0 关注
- 530 浏览
添加回答
举报
0/150
提交
取消