我尝试通过返回专门函数的字典来创建函数工厂,或多或少类似于函数式编程风格。我尝试在以下代码中执行此操作。
require(hash)
names = c("aa","bb","cc");
funs = hash()
for (i in seq(length(names))) {
n = names[i]
funs[[n]] = function(x) {
print(paste(n,":",x, sep=""))
}
}
显然,我在数组中有 3 个函数;但是,它们的行为都与迭代中的最后一个函数相同。
> funs[["aa"]](1)
[1] "cc:1"
> funs[["bb"]](2)
[1] "cc:2"
> funs[["cc"]](3)
[1] "cc:3"
我的猜测是 R 没有创建新的函数实例,而是在 for 循环中重用了相同的函数对象。
我尝试以下方法,希望 R 会创建不同的函数对象,
funs[[n]] = eval(parse(text="function(x) { print(paste(n,':',x, sep='')) }"))
但它的工作原理与第一个相同。
你知道如何创建一个生成器来创建不同的函数对象吗?