我正在读哈德利·威克汉姆关于Github的书,尤其是this part on lazy evaluation本.在这一部分中,他给出了一个懒惰判断结果的示例,其中包含add/adders
个函数.让我引用这一点:
在使用lappy或循环创建闭包时,此[延迟判断]非常重要:
add <- function(x) { function(y) x + y } adders <- lapply(1:10, add) adders[[1]](10) adders[[10]](10)
当你第一次调用其中一个加法器时,x被惰性地计算出来
add <- function(x) { force(x) function(y) x + y } adders2 <- lapply(1:10, add) adders2[[1]](10) adders2[[10]](10)
我似乎不明白这一点,而且解释也很少.有人能详细说明一下这个例子,并解释一下那里发生了什么吗?我对"此时,循环已完成,x的最终值为10"这句话感到特别困惑.什么回路?什么是最终价值,在哪里?一定是我错过了一些简单的东西,但我就是看不到.非常感谢.