有人可以解释一下以下代码段为什么会如此吗?

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) }}

08-25 02:40