我看到 library(roxygen) 中的 Curry 函数出现了奇怪的行为。这是一个最小的例子:
library(roxygen)
library(foreach)
f <- function(x,y,z) { return(x+y+z) }
fns <- list()
foreach(i=c(1:10)) %do% {
f[[i]] <- Curry(Curry(f,i),i)
}
在这种情况下,调用
f[[1]](0)
返回 11。我期望 2。
有 2 个修复对我来说没有任何意义 - 一个是扁平化循环,如
fns <- list()
fns[[1]] <- Curry(Curry(f,1),1)
fns[[2]] <- Curry(Curry(f,2),2)
...
这样可行。此外,在原始循环中放置一个函数评估是可行的——如
fns <- list()
foreach(i=c(1:10)) %do% {
f[[i]] <- Curry(Curry(f,i),i)
f[[i]](27)
}
然后我们有
f[[1]](0) = 2.
这是怎么回事?