有人可以解释一下以下代码段为什么会如此吗?
l <- list()
AddFn <- function(str) { l[[length(l) + 1]] <<- function() { return(str) }}
AddFn("hello")
AddFn("there")
l[[1]]() # Returns "hello" as expected
l[[2]]() # Returns "there" as expected
for (letter in letters) AddFn(letter)
l[[3]]() # Returns "z"
我希望
l[[3]]()
返回“ a”。我想念什么?我的AddFn函数到底能做什么?先感谢您,
阿德里安
最佳答案
惰性评估通常会导致循环中的最后评估返回。尝试以下方法:
AddFn <- function(str) { force(str); l[[length(l) + 1]] <<- function() { return(str) }}